对于我的网站导航,我想指出当前页面。如果导航中的每个页面都有自己的路线,那么有办法查看当前请求是否与路线匹配?喜欢的东西:将路线与Symfony中的当前请求进行比较
$request->getRoute() == '@my_route'
,或者更一般地说,有没有在Symfony的创建网站导航时设置在活动页面的惯用方式是什么?
对于我的网站导航,我想指出当前页面。如果导航中的每个页面都有自己的路线,那么有办法查看当前请求是否与路线匹配?喜欢的东西:将路线与Symfony中的当前请求进行比较
$request->getRoute() == '@my_route'
,或者更一般地说,有没有在Symfony的创建网站导航时设置在活动页面的惯用方式是什么?
或者更普遍的是,在Symfony中创建站点导航时,是否有一种设置活动页面的惯用方式?
请不要使用sfContext :: getInstance(),路由名称或内部uris。有几种方法可以实现导航菜单,Symfony的突出,personnaly我喜欢设置一个请求属性,像这样的(例如,在控制器):
<?php
// ...
public function executeFoo(sfWebRequest $request)
{
$request->setAttribute('section', 'blah');
}
在你的模板
然后:
<ul>
<li class="<?php echo 'blah' === $sf_request->getAttribute('section') ? 'active' : '' ?>">
<a href="<php echo url_for('@my_route') ?>">Blah</a>
</li>
</ul>
你甚至可以从你的路由在routing.yml
文件中添加section
参数:
my_route:
url: /foo
param: { module: foo, action: bar, section: blah }
然后在你的模板,如果你这样做,小心地检查是否有热曲est参数代替属性:
<ul>
<li class="<?php echo 'blah' === $sf_request->getParameter('section') ? 'active' : '' ?>">
<a href="<php echo url_for('@my_route') ?>">Blah</a>
</li>
</ul>
简单而高效,对不对?但是如果你需要更复杂的导航(尤其是嵌套菜单),你应该考虑使用一些更加全功能的插件或基于symfony的CMS,比如Sympal,Diem或者ApostropheCMS。
您可以尝试工作,执行以下操作:
In template:
$route = $sf_context->getInstance()->getRouting()->getCurrentRouteName();
In action:
$route = sfContext::getInstance()->getRouting()->getCurrentRouteName();
什么返回是因为你在路由已经定义了路由名称。例如,如果您有一个名为“@search_results”的路由规则,则上述方法将返回“search_results”。
也许有更好的方法,但我也用它来设置我的布局中的当前活动页面...如果当前路由名称匹配“xxx”,则向导航元素添加“selected”类。
我创建了一个帮手,把它添加到standard_helpers参数和我创建一个使用这个代替的link_to的导航链接:
function thu_menu($name, $uri, $options = array())
{
return link_to_unless(strpos(sfContext::getInstance()->getRouting()->getCurrentInternalUri(true), $uri) !== false, $name, $uri, $options);
}
我不喜欢sfContext ::的getInstance(),但这是只有我发现的方式。