在我的module.config.php中分离子导航和顶级导航配置

时间:2014-04-10 22:08:00

标签: php dependency-injection zend-framework2

使用zf2我有一个subnav栏出现在我的一个模块的每一页上。它使用视图助手和部分(全部包含在模块中)进行渲染。该模块从其自己的module.config.php中拉取配置:

'navigation' => array(
    'default' => array(
        array(
            'label' => 'aaa',
            'route' => 'aaa',
        ),
        array(
            'label' => 'bbb',
            'route' => 'bbb',
        ),
        array(
            'label' => 'ccc',
            'route' => 'ccc', ...

现在,我想为应用程序模块中呈现的站点范围导航栏添加配置。问题当然是合并的配置,所以我不能只添加一个导航'键入应用程序模块的module.config.php。

什么时候处理这​​个问题最好?如何在服务管理器中存储和隔离模块特定的子区域和顶级导航?

1 个答案:

答案 0 :(得分:0)

  

问题当然是合并的配置

为什么会出现问题?

应用程序(module.config.php)

'navigation' => array(
   'default' => array(
     // application pages...
   )
 ),

FooModule(module.config)

'navigation' = array(
  'foo_nav' => array(
     // foo pages...
   ),
   'foo_module_specific_sidebar_name' = array(
     // foo sidebar pages
   )
),

合并配置

'navigation' => array(
   'default' => array(
     // application pages...
   ),
  'foo_nav' => array(
     // foo pages...
   ),
   'foo_module_specific_sidebar_name' = array(
     // foo sidebar pages
   )
),

使用array_merge_recursive()

合并ZF2
  

如果输入数组具有相同的字符串键,则这些键的值将合并到一个数组中,并且这是递归完成的,因此如果其中一个值是数组本身,则该函数将合并它另一个数组中的相应条目

如果您没有复制导航名称,并且让the appropriate factories 放置配置并不重要。