zf2导航isActive无法使用uri

时间:2013-07-02 03:29:40

标签: navigation zend-framework2

我正在使用Navigation构建菜单。在我的配置文件中,我正在使用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 . '"' : '' ?>>
    ...

当我尝试手动执行此操作时,我正在尝试与$ this-&gt; url进行比较。我意识到$ this-&gt; url只返回路由路径。这意味着,在我的例子中,当我在/ application / intro中时,$ this-&gt; url将只返回/ application /并且不会返回“intro”控制器。

我的问题是,如何通过控制器,操作等返回网址?或者我该怎么做才能确保isActive能够正常工作。

提前致谢!

贾斯汀

1 个答案:

答案 0 :(得分:1)

来自http://framework.zend.com/manual/2.0/en/modules/zend.navigation.pages.html的文档:

  

请注意

     

Zend \ Navigation \ Page \ Uri不会尝试确定是否应该这样做   在调用$ page-&gt; isActive()时处于活动状态。它只是返回什么   当前已设置,因此要使URI页面处于活动状态,您必须手动进行   调用$ page-&gt; setActive()或指定active作为页面选项   构建。

因此,只要您使用uri页面进行导航,这将无效。使用导航路线时究竟什么不起作用?

编辑: 您正在使用“应用程序”路由,因此如果该路由在您的OP中定义,那么它将始终返回/ application,因为它是路由属性设置为/ application的文字路由。你可能想要的是将导航项指向应用程序路由的子路由,那么如果你尝试将路由设置为application / default呢?