【问题标题】:Separating sub navigation and top level navigation configuration in my module.config.php在我的 module.config.php 中分离子导航和顶级导航配置
【发布时间】:2014-04-10 22:08:00
【问题描述】:

使用 zf2 我有一个子导航栏,它出现在我的一个模块的每一页上。它使用视图助手和部分渲染(全部包含在模块中)。模块从自己的 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 中添加一个“导航”键。

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

【问题讨论】:

    标签: php dependency-injection zend-framework2


    【解决方案1】:

    问题当然是配置被合并了

    为什么会有这样的问题?

    应用程序(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
       )
    ),
    

    ZF2 使用 array_merge_recursive() 合并

    如果输入数组有相同的字符串键,那么这些键的值被合并到一个数组中,这是递归完成的,所以如果其中一个值是一个数组本身,函数会将它与另一个数组中的对应条目也是

    如果你没有重复导航名称并且有the appropriate factories 哪里你放置配置并不重要。

    【讨论】:

    • 如何访问其他配置?现在在 $this->navbar('navigation') 这样的视图中调用我的视图助手。如何在导航配置中传递嵌套数组?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多