0

我正在使用导航构建菜单。在我的配置文件中,我使用的是 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->url 进行比较。我意识到 $this->url 只返回路由的路径。这意味着,在我的示例中,当我在 /application/intro 中时,$this->url 只会返回 /application/ 并且不会返回“intro”控制器。

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

提前致谢!

贾斯汀

4

1 回答 1

1

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

笔记

Zend\Navigation\Page\Uri 在调用$page->isActive() 时不会尝试确定它是否应该处于活动状态。它仅返回当前设置的内容,因此要使 URI 页面处于活动状态,您必须手动调用 $page->setActive() 或在构建时将活动指定为页面选项。

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

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

于 2013-07-02T05:06:49.157 回答