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

$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/

10-11 12:00