Routing 将路由与Symfony中的当前请求进行比较

Routing 将路由与Symfony中的当前请求进行比较,routing,symfony1,navigation,Routing,Symfony1,Navigation,对于我的站点导航,我想指出当前页面。如果导航中的每个页面都有自己的路由,是否有办法查看当前请求是否与路由匹配?比如: $request->getRoute()='@my\u route' 或者,更一般地说,在Symfony中创建站点导航时,是否有一种惯用的设置活动页面的方法?您可以尝试使用以下方法: In template: $route = $sf_context->getInstance()->getRouting()->getCurrentRouteName(); In

对于我的站点导航,我想指出当前页面。如果导航中的每个页面都有自己的路由,是否有办法查看当前请求是否与路由匹配?比如:

$request->getRoute()='@my\u route'


或者,更一般地说,在Symfony中创建站点导航时,是否有一种惯用的设置活动页面的方法?

您可以尝试使用以下方法:

In template:
$route = $sf_context->getInstance()->getRouting()->getCurrentRouteName();

In action:
$route = sfContext::getInstance()->getRouting()->getCurrentRouteName();
它返回的是您在路由中定义的路由名称。例如,如果您有一个名为“@search\u results”的路由规则,上面的方法将返回“search\u results”


也许有更好的方法,但我也在用它来设置布局中的当前活动页面。。。如果当前路线名称与“xxx”匹配,则将“选定”类添加到导航元素中。

我创建了一个帮助程序,将其添加到标准的\u帮助程序中,并使用它创建导航链接,而不是链接到:

function thu_menu($name, $uri, $options = array())
{
  return link_to_unless(strpos(sfContext::getInstance()->getRouting()->getCurrentInternalUri(true), $uri) !== false, $name, $uri, $options);
}
我不喜欢sfContext::getInstance(),但这是我找到的唯一方法

或者,更一般地说,在Symfony中创建站点导航时,是否有一种惯用的方法来设置活动页面

不要为此使用sfContext::getInstance()、路由名称或内部URI。有几种方法可以通过Symfony实现导航菜单高亮显示,personnaly我喜欢设置请求属性(例如在控制器中),如下所示:

<?php
// ...
  public function executeFoo(sfWebRequest $request)
  {
    $request->setAttribute('section', 'blah');
  }
然后,如果您这样做,请在模板中仔细检查请求参数n而不是属性:

<ul>
  <li class="<?php echo 'blah' === $sf_request->getParameter('section') ? 'active' : '' ?>">
    <a href="<php echo url_for('@my_route') ?>">Blah</a>
  </li>
</ul>
    my_route:
      url: /foo
      param: { module: foo, action: bar, section: blah }
    
    <ul>
      <li class="<?php echo 'blah' === $sf_request->getParameter('section') ? 'active' : '' ?>">
        <a href="<php echo url_for('@my_route') ?>">Blah</a>
      </li>
    </ul>