Navigation zf2导航是活动的,不使用uri

Navigation zf2导航是活动的,不使用uri,navigation,zend-framework2,Navigation,Zend Framework2,我正在使用导航构建菜单。在我的配置文件中,我使用的是uri(我无法使路由、控制器和操作正常工作) 应用程序模块的路由是默认路由,设置如下 'application' => array( 'type' => 'Literal', 'options' => array( 'route' => '/application', 'defaul

我正在使用导航构建菜单。在我的配置文件中,我使用的是uri(我无法使路由、控制器和操作正常工作)

应用程序模块的路由是默认路由,设置如下

        '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->url进行比较。我意识到$this->url只返回路由的路径。这意味着,在我的示例中,当我在/application/intro中时,$this->url将只返回/application/,而不返回“intro”控制器

我的问题是,如何使用控制器、操作等返回url。?或者我可以做些什么来确保iActive能够正常工作

提前谢谢

Justin

来自以下文档:

Zend\Navigation\Page\Uri不会尝试确定是否应该 调用$page->isActive()时处于活动状态。它只是返回什么 当前已设置,因此要使URI页处于活动状态,必须手动 调用$page->setActive()或在以下情况下指定active作为页面选项: 建设

因此,只要您使用uri页面进行导航,这就不会起作用。在使用路线进行导航时,哪些地方不起作用

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

谢谢您的提示Ruben!非常感谢。我将尝试使用$this->url()检查并设置活动(尽管我仍然有问题,因为$this->url()不返回带有控制器的url(/application/而不是/application/intro)。除此之外,我在使用routes时遇到的问题是,控制器和操作没有构建到href。当设置route to application和controller to intro时,getHref()将只返回/application(当我希望获取/application/intro时)。我打赌这是我忽略的愚蠢的事情。有什么提示吗?嗯,让我说清楚。您正在使用“应用程序”路由,因此如果该路由在OP中定义为,那么它将始终返回/application,因为它是一个文本路由,路由属性设置为/application。您可能需要将导航项指向child应用程序路由的路由,那么如果您尝试将路由设置为application/default呢?谢谢Ruben!这肯定解决了它!这花了我几个小时!干杯Ruben!没问题,很高兴我能提供帮助。:)
<?php foreach ($this->container as $page): ?>

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