Zend Framework 2 MVC - 模块路由映射无法正常工作

时间:2012-07-05 08:55:26

标签: zend-framework2

我尝试关注Akrabats Tutorial应用程序/索引正在运行,而专辑部分没有。

我也尝试了ZendSkeletonModule而没有运气。

两种情况下的错误都是:

album/album (resolves to invalid controller class or alias: album/album)

我尝试使用ZF2 master和beta4标签(但beta4标签给出了关于缺少方法getEventManager的php错误)

我从Akrabats教程中获取代码,然后失败后使用代码形式GitHub Repo。不幸的是,没有一些论坛或评论部分可以寻求帮助。

我在教程和Skeleton(zfcUser有相同的差异)中发现了一些不同之处在module.config.php中(我相信这是问题的核心)。

本教程使用classes在控制器索引,zfcUser和Skeleton中使用invokables,但它似乎并不重要,因为错误不会改变。

我的module.config目前看起来像这样:

<?php

return array(

    // Controllers in this module
    'controller' => array(
        'invokables' => array(
            'album/album' => 'Album\Controller\AlbumController',
        ),        
    ),


    // Routes for this module
    'router' => array(
        'routes' => array(
            'album' => array(
                'type' => 'Literal',
                'priority' => 1000,
                'options' => array(
                    'route' => '/album',
                    'defaults' => array(
                        'controller' => 'album/album',
                        'action' => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array( 
                    'misc' => 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/album',
                                'action'     => 'index',
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),    

    // View setup for this module
    'view_manager' => array(
        'template_path_stack' => array(
            'album' => __DIR__ . '/../view',
        ),
    ),
);

相册\控制器\ AlbumController:

<?php

namespace Album\Controller;

use Zend\Mvc\Controller\ActionController,
    Zend\View\Model\ViewModel,
    Album\Model\AlbumTable,
    Album\Model\Album,
    Album\Form\AlbumForm;

class AlbumController extends ActionController
{
// [....]
}

我不知道在哪里修复此错误,你有人有想法吗?

如果没有另外提及,代码就像github上的原始代码(见上面的链接)。

TIA

4 个答案:

答案 0 :(得分:7)

这里的不同之处不仅在于invokables,而且数组键现在是复数形式的“controller s ”,这对我来说很有用。在您的代码中,“invokables”已经更改,但您似乎使用“controller”作为密钥。

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

答案 1 :(得分:4)

显然控制器阵列有变化。现在classes键被更改为invokables: 在module.config.php

    'controller' => array(
            'classes' => array(
                    'album/album' => 'Album\Controller\AlbumController',
            ),
    ),

必须更改为

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

答案 2 :(得分:3)

发现它,它的ActionController类似乎已经消失在ZF2-beta4上,所以你的AlbumController 需要这样:

use Zend\Mvc\Controller\AbstractActionController,
    Zend\View\Model\ViewModel;

class AlbumController extends AbstractActionController {
   .....
}

答案 3 :(得分:0)

你必须正确配置/ application.config.php

<?php
return array(
    'modules' => array(
        'Application',
        'Album',
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            'config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            './module',
            './vendor',
        ),
    ),
);