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>