如何在模块中更改Zend Framework 2中的basePath

时间:2014-05-01 13:07:39

标签: module zend-framework2

注意 - 首先,仔细阅读问题。

我是ZF2的新手。现在我正在研究zend框架2.3。我在这个项目中有三个模块,我正在研究Wamp。

  1. 申请----------- //默认ZF2页。
  2. 专辑------------ // ZF2教程示例
  3. Html ------------ //我已创建
  4. 我为Html模块创建了一个自定义布局(最后一个)。但是有一个basePath的问题。我没有在这个模块中获得正确的页面路径。所以我在Html / config / module.config.php中更改并在module.config.php中添加以下脚本

     'view_manager' => array(
         'base_path' => 'zend/public/htmlmodule/',
         'template_path_stack' => array(
         'html' => __DIR__ . '/../view',
        ),
    ),
    

    现在,我正在为这个模块获得正确的基本路径。但是现在basepath会自动更改另外两个模块,例如专辑和应用程序。现在我删除了上面的代码,并在zend\config\autoload\local.php

    中添加了此代码
    view_manager' => array(
        'base_path' => 'zend/public/htmlmodule/',
        'template_path_stack' => array(
        'html' => __DIR__ . '/../view',
        ),
    ),
    

    现在这个脚本有所有模块的更改路径。

    现在,我的问题是,我希望更改特定模块和布局(可选)的基本路径,而不是所有模块,并且需要不同模块的不同基路径。实际上没有右基路径,你将无法获得正确的image / css和js文件。

    这里我将共享所有2个模块的module.config.php文件。

    <?php
    
    //Album Module > module.config.php
    
    return array(
    'controllers' => array(
        'invokables' => array(
            'Album\Controller\Album' => 'Album\Controller\AlbumController',
        ),
    ),
    
    'router' => array(
        'routes' => array(
            'album' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/album[/][:action][/:id]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Album\Controller\Album',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),
    
    'view_manager' => array(
       'base_path' => 'zend/public/album',
       'template_path_stack' => array(
           'album' => __DIR__ . '/../view',
            ),
         ),
     );
    

    和HTML模块的module.config.php是:

    <?php
    return array(
        'controllers' => array(
            'invokables' => array(
                'Html\Controller\Html' => 'Html\Controller\HtmlController',
             ),
         ),
         'module_layouts' => array(
         'Application' => 'layout/layout.phtml',
         'Html' => 'layout/custom.phtml',
     ),
    
     'router' => array(
         'routes' => array(
             'html' => array(
                 'type'    => 'segment',
                 'options' => array(
                     'route'    => '/html[/][:action][/:id]',
                     'constraints' => array(
                         'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                         'id'     => '[0-9]+',
                     ),
                     'defaults' => array(
                         'controller' => 'Html\Controller\Html',
                         'action'     => 'index',
                     ),
                 ),
             ),
         ),
     ),
    
    'view_manager' => array(
        'base_path' => 'zend/public/htmlmodule/',
        'template_path_stack' => array(
            'html' => __DIR__ . '/../view',
             ),
         ),  
    );
    

    我想知道,我在哪里做错了,我将如何根据模块获得正确的基本路径。

    感谢所有人提前为这个问题做出贡献。

1 个答案:

答案 0 :(得分:1)

为每个视图管理器添加特定的base_path密钥,然后尝试使用$this->getHelper('basePath')->setBasePath()为您生成的viewModel确保。

作为一个警告,我完全通过使基本路径成为树中的“最低点”来避免这个问题,在您的情况下:

'view_manager' => array(
    'base_path' => 'zend/public/',
    'template_path_stack' => array(
        'html' => __DIR__ . '/../view',
    ),
),

然后在模块特定视图中添加模块特定路径部分。因此,如果我想在公共视频文件夹中访问相册特定的css或js文件,那么在我的视图中,我将引用基本路径,只需在路径的其余部分之前添加“/ album”。对你来说不那么头疼我相信如果你这样做的话。