是什么决定了ZF2中的视图文件夹结构?

时间:2015-11-10 14:40:25

标签: php zend-framework routes zend-framework2

是什么决定了ZF2中的视图文件夹结构?我使用Album app跟踪了最初的ZF2教程,并注意到相册模块的视图位置在/module/Album/view/album/album/*.phtml

是什么决定/album/album/部分?
为什么这些目录都是小写的?
为什么嵌套的名字相同?
在什么情况下他们会不一样?

我认为答案在module.config.php文件中。但我尝试使用album的3个实例进行组合,尝试将每个实例单独更改为album1以查看其效果。这是我的module.config.php,其中每个更改的结果都在其旁边注释。

return array(
    'controllers' => array(
        'invokables' => array(
            'Album\Controller\Album' => 'Album\Controller\AlbumController',
        ),
    ),

    // The following section is new and should be added to your file
    'router' => array(
        'routes' => array(
            'album' => array( //When switching to `album1` I get "Route with name "album" not found"
                              //If this is anything but `album` I get this error, regardless of the other 2 values.
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/album[/:action][/:id]',    //When switching to `album1` I get "The requested URL could not be matched by routing."
                                                                //If I change my url to /album1 though, it works so long as the first is still `album`
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Album\Controller\Album',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),

    'view_manager' => array(
        'template_path_stack' => array(
            'album' => __DIR__ . '/../view',    //Changing this seems to have no effect.
                                                //I even changed this to `abc123` and it still worked while the other two instances were still `album`.
        ),
    ),
);

1 个答案:

答案 0 :(得分:6)

默认情况下,ZF使用/<module>/<controller>/<action>.phtml查找视图。 &#39;模块&#39;,&#39;控制器&#39;和&#39;行动&#39;标准化为小写,将驼峰的单词转换为破折号。

在您的示例中,单词&#39; album&#39;重复,因为模块和控制器都被调用。如果你有一个&#39;曲目&#39;在相册模块中的控制器,并正在查看“添加&#39;动作,默认情况下,ZF会在/album/tracks/add.phtml中查找视图。

至于为什么名称被转换为小写,我无法记住。这可能是因为PHP类/函数名称不区分大小写,可能是因为人们通常在URL中使用小写单词,或者可能只是因为这通常是人们在框架之外组织网站的方式。可能是这些东西的某种组合。