2013-07-02 60 views
0

我正在使用導航建立菜單。在我的配置文件,我使用URI(我無法得到路線,控制器,動作正常工作)zf2導航isActive不與uri一起工作

'navigation' => array(
    'default' => array(
     array(
      'label' => 'Home', 
      // not sure why I can't use route, controller, action... 
      // for now, i'm using uri 
      'uri'  => '/', 
     ), 
     array(
      'label'  => 'About us', 
      'uri'  => '/application/intro', 
     ), ... 

應用模塊的路徑是默認的,建立這樣

 'application' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/application', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'default' => array(
        'type' => 'Segment', 
        'options' => array(
         'route' => '/[:controller[/:action]]', 
         'constraints' => array(
          'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
         ), 
         'defaults' => array(
         ), 
        ), 
       ), 
      ), 
     ), 
現在

,isActive是不是在我看來,工作(部分)調用

<?php foreach ($this->container as $page): ?> 

    <li <?php echo $page->isActive()? 'class="' . $activeClass . '"' : '' ?>> 
    ... 

當我試圖手動做到這一點的時候,我試圖用$這個 - 比較> URL。我意識到$ this-> url只返回路由的路徑。意思是,在我的例子中,當我在/ application/intro時,$ this-> url將只返回/ application /,並且不會返回「intro」控制器。

我的問題是,我該如何才能返回與控制器,行動等網址?或者我能做些什麼來確保isActive可以正常工作。

在此先感謝!

賈斯汀

回答

1

從文檔在http://framework.zend.com/manual/2.0/en/modules/zend.navigation.pages.html

的Zend \導航\頁\烏里不會嘗試確定是否調用$當它應該 激活頁面級>活躍()。它僅返回當前設置的 ,因此要使URI頁面處於活動狀態,必須手動調用 調用$ page-> setActive()或在構建 時指定active作爲頁面選項。

所以只要你使用uri頁面進行導航,這是行不通的。使用路線進行導航時究竟發生了什麼?

編輯: 您正在使用'application'路由,因此如果該路由在您的OP中定義,那麼它將始終返回/ application,因爲它是路由屬性設置爲/ application的文字路由。您可能需要的是將導航項目指向應用程序路由的子路由,那麼如果嘗試將路由設置爲應用程序/默認路徑,該怎麼辦?

+0

感謝您的注意魯本!真的很感激它。我會嘗試使用$ this-> url()來檢查和setActive(儘管我仍然有問題,因爲$ this-> url()不會返回帶有控制器(/ application /而不是/ application/intro)的url )除此之外,我在使用路由時遇到的問題是控制器和動作沒有被構建到href中。當設置路由到應用程序和控制器到前奏時,getHref()將只返回/ application(當我希望我得到的結果是,我忽略了一些愚蠢的東西,我忽略了一些提示? – juworld

+0

嗯,讓我弄清楚這個,你正在使用'application'路由,所以如果這個路由被定義爲你的OP,它總是返回/應用程序,因爲它是一個路由屬性設置爲/ application的文字路由。你可能想要的是將導航項指向應用程序路由的子路由,那麼如果你嘗試將路由設置爲應用程序/默認代替? – Ruben

+0

謝謝魯本!這絕對是固定它!花了我幾個小時!歡呼魯本! – juworld