對於我的網站導航,我想指出當前頁面。如果導航中的每個頁面都有自己的路線,那麼有辦法查看當前請求是否與路線匹配?喜歡的東西:將路線與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(),但這是隻有我發現的方式。