对于我的网站导航,我想指出当前页面。如果导航中的每个页面都有自己的路线,是否有办法查看当前请求是否与该路线匹配?就像是:$request->getRoute() == '@my_route'
或者,更一般而言,在Symfony中创建站点导航时,是否有惯用的方式来设置活动页面?
最佳答案
或者,更一般而言,在Symfony中创建站点导航时,是否有惯用的方式来设置活动页面?
不要为此使用sfContext :: getInstance(),路由名称或内部uri。有几种方法可以使用Symfony突出显示导航菜单,我个人喜欢设置请求属性(例如在控制器中),就像这样:
<?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>
您甚至可以从路由中的
section
文件中添加routing.yml
参数: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>
简单而有效,对吗?但是,如果您需要更复杂的导航(尤其是嵌套菜单),则应该考虑使用一些功能更全的插件或基于Symfony的CMS(例如Sympal,Diem或ApostropheCMS)。
关于routing - 在Symfony中将路由与当前请求进行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2739923/