【问题标题】:The requested controller could not be mapped to an existing controller class. zf3 with routes to several controllers in one module请求的控制器无法映射到现有的控制器类。 zf3 在一个模块中具有到多个控制器的路由
【发布时间】:2018-04-25 11:38:24
【问题描述】:

当我尝试在一个模块中创建到多个控制器的路由时,我收到了this

        'application' => [
            'type'    => Segment::class,
            'options' => [
                'route'    => '/application[/:action]',
                'defaults' => [
                    'controller' => Controller\IndexController::class,
                    'action'     => 'index',
                ],
            ],
        ],
        'vehicles' => [
            'type'    => Segment::class,
            'options' => [
                'route'    => '/vehicles[/:action]',
                'defaults' => [
                    'controller' => Controller\VehiclesController::class,
                    'action'     => 'index',
                ],
            ],
        ],

调用IndexControllerindexAction() 效果很好。但是它不适用于VehiclesController。我试图在factories 中调用VehiclesController - 不成功。

'controllers' => [
    'factories' => [
        Controller\IndexController::class => InvokableFactory::class,
        Controller\VehiclesController::class => InvokableFactory::class,
    ],
    ],

使用ServiceManager函数

'controllers' => [
    'factories' => [
        Controller\VehiclesController::class => function($sm){
            $vehiclesService=$sm->get('Application\Model\VehiclesTable');
            return new Controller\VehiclesController($vehiclesService);
        }
    ],
],

【问题讨论】:

    标签: php model-view-controller controller routes zend-framework3


    【解决方案1】:

    也许你正在做类似下面的事情来调用你的module.config.php中的控制器

    'controllers' => [
        'factories' => [
            Controller\IndexController::class => InvokableFactory::class,
            Controller\IndexController::class => InvokableFactory::class,
        ],
    ],
    

    因此,您可能在 factories 键下使用了两次相同的控制器名称。可能如上或不同的方式。

    所以在controllers 键的factories 子键下定义一次,如下所示

    'controllers' => [
        'factories' => [
            Controller\IndexController::class => InvokableFactory::class,
            Controller\VehiclesController::class => InvokableFactory::class,
        ],
    ],
    

    【讨论】:

    • 我刚刚在factories 下调用了控制器,就像在您的问题中一样。也尝试使用ServiceManager 函数调用它,也不起作用。
    • 您的应用程序的data 文件夹中有缓存文件吗?如果是这样,请删除所有这些,然后重试。我看到你正在通过控制器的构造函数传递一些服务,为此,你必须为你的控制器创建一个工厂。在这种情况下使用InvokableFactory::class 将不起作用。
    猜你喜欢
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多