7

从配置构建导航:

'navigation' => array(
    'default' => array(
        'admin' => array(
                'label' => 'Administration',
                'controller' => 'index',
                'action' => 'index',
                'route' => 'admin/default',
              ),
         'album' => array(
                'label' => 'Album',
                'controller' => 'index',
                'action' => 'index',
                'route' => 'album/default',
              ),
  /* ... */

路由配置就像它是真的一样。菜单中的导航有效。链接菜单指向所需模块的所需控制器/动作。但是在引入菜单和过渡到一个或另一个菜单项时,active 同时标记了两个点以及“管理”和“专辑”。据我了解,出于与控制器名称和操作名称匹配的原因,但仍然存在“路线”并且它有所不同......并非没有为每个项目生成不同的网址......但不知何故,尽管这,它们都被标记为活动的。

路由配置:

    'router' => array(
    'routes' => array(
        'admin' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/admin',
                'defaults' => array(
                    '__NAMESPACE__' => 'Admin\Controller',
                    'controller'    => 'Index',
                    'action'        => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'default' => array(
                    'type'    => 'Segment',
                    'options' => array(
                        'route'    => '/[:controller][/:action[/id:id]]',
                        'constraints' => array(
                            'controller'    => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'action'        => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'id'            => '[0-9]+',
                        ),
                        'defaults' => array(
                        ),
                    ),
                ),

专辑路由配置类似...

为什么会这样?谢谢。

4

2 回答 2

0

如果您使控制器名称包含命名空间,那么它们将是唯一的并且不会发生冲突:

Admin\Controller\IndexController
Album\Controller\IndexController

而不是

Index
Index
于 2013-02-12T09:40:33.023 回答
0

看起来这就是 ZF2 的工作方式(isActive()Zend\Navigation\Page\Mvc.php 中的读取函数)。最初它检查路由/控制器/动作的匹配,但如果失败,ZF2 再次检查控制器/动作对。所以有三种可能的方式:

  1. 在https://github.com/zendframework/zf2/issues打开一个工单并等待响应。

  2. 覆盖\Zend\Navigation\Page\Mvc

  3. 为控制器选择不同的名称(不要使用index名称,因为它是 Mvc.php 中控制器的默认名称)。

于 2012-11-17T15:02:32.160 回答