Php ZF3:具有子路由的控制器不工作

Php ZF3:具有子路由的控制器不工作,php,model-view-controller,configuration,zend-framework3,Php,Model View Controller,Configuration,Zend Framework3,我是ZF2开发人员,正在迁移到ZF3,在使用一些控制器时遇到了问题 例如,我有一个url:它调用正确的控制器IndexController并显示正确的视图。但是,如果我想将这个url:与ArticuloController关联起来,它就不起作用。当我调用此url时:调用的控制器是AdminController,找不到视图 选项1=>module.config.php: 选项2=>module.config.php ZF2样式: 选项3=>module.config.php遵循zf3教程: 对于

我是ZF2开发人员,正在迁移到ZF3,在使用一些控制器时遇到了问题

例如,我有一个url:它调用正确的控制器IndexController并显示正确的视图。但是,如果我想将这个url:与ArticuloController关联起来,它就不起作用。当我调用此url时:调用的控制器是AdminController,找不到视图

选项1=>module.config.php:

选项2=>module.config.php ZF2样式:

选项3=>module.config.php遵循zf3教程:

对于调用url时的所有配置:我得到的视图是

您可以看到调用的控制器是Admin\controller\IndexController,而不是Admin\controller\articuloscocontroller

我做错了什么

更新1:

选项3配置工作正常!!!我已经删除了/cache目录中的所有内容,现在找到了控制器,但是。。。现在呈现模板时出错

信息:

Zend\View\Renderer\PhpRenderer::render:无法呈现模板 管理员/关节/索引;解析程序无法解析为文件

堆栈跟踪:

0/var/www/html/31juegos/vendor/zendframework/zend view/src/view.php207: Zend\View\Renderer\PhpRenderer->render

1/var/www/html/31juegos/vendor/zendframework/zend view/src/view.php236: Zend\View\View->renderObjectZend\View\Model\ViewModel

2/var/www/html/31juegos/vendor/zendframework/zend view/src/view.php200: Zend\View\View->renderChildrenObjectZend\View\Model\ViewModel

3/var/www/html/31juegos/vendor/zendframework/zend-mvc/src/View/Http/DefaultRenderingStrategy.php105:

Zend\View\View->renderObjectZend\View\Model\ViewModel

4/var/www/html/31juegos/vendor/zendframework/zend eventmanager/src/eventmanager.php322: Zend\Mvc\View\Http\DefaultRenderingStrategy->renderObjectZend\Mvc\MvcEvent

5/var/www/html/31juegos/vendor/zendframework/zend eventmanager/src/eventmanager.php171: Zend\EventManager\EventManager->triggerListenersObjectZend\Mvc\MvcEvent

6/var/www/html/31juegos/vendor/zendframework/zend mvc/src/Application.php367: Zend\EventManager\EventManager->TriggerEventTobjectZend\Mvc\MvcEvent

7/var/www/html/31juegos/vendor/zendframework/zend-mvc/src/Application.php348: Zend\Mvc\Application->CompleteRequestoObjectZend\Mvc\MvcEvent

8/var/www/html/31juegos/public/index.php40:Zend\Mvc\Application->run

9{main}

这是一个打字错误的问题。试试这个http://localhost/admin/articulos 请注意结尾s,因为您的路由器是/admin/articulos,它指向此ArticulosController的索引。这就是为什么这个urlhttp://localhost/admin/articulo 没有结束,s无法调度。视图结构应为模块/控制器/动作类型

代表OP发布


最后,我解决了最后一个问题。问题是由于我的index.phtml位于错误的目录/view/admin/articulos/**index/**index.phtml中。正确的目录是/view/admin/articulos/index.phtml。

谢谢您的帮助!!!但是,使用不起作用:是的。根据选项1和选项3的配置,我已经在我的初始邮件中添加了更多信息。管理员/articulos和管理员/index/articulos路由在这里工作正常。请将视图模板改为admin/articulos/index.phtml,而不是admin/articulos/index/index.phtmlYes!!!!我已经看到它现在和修复它!!!非常感谢您的帮助!!!你救了我的命!!!我建议这个问题到此为止,因为这个问题是由一个无法再复制的问题或一个简单的印刷错误引起的。
namespace Admin;

use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
use Zend\ServiceManager\Factory\InvokableFactory;

return [
    'router' => [
        'routes' => [
            'admin' => [
                'type'    => Segment::class,
                'options' => [
                    'route'    => '/admin[/:action]',
                    'defaults' => [
                        'controller' => Controller\IndexController::class,
                        'action'     => 'index',
                    ],
                ],
            ],
            'admin/articulos' => [
                'type'    => Segment::class,
                'options' => [
                    'route'    => '/admin/articulos[/:action]',
                    'defaults' => [
                        'controller' => Controller\ArticulosController::class,
                        'action'     => 'index',
                    ],
                ],
            ],            
        ],
    ],
    'controllers' => [
        'factories' => [
            Controller\IndexController::class => InvokableFactory::class,
            Controller\ArticulosController::class => InvokableFactory::class,
        ],
    ],
    'view_manager' => [
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => [
            'layout/layout'           => __DIR__ . '/../view/layout/layout-admin.phtml',
            'admin/index/index'       => __DIR__ . '/../view/admin/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ],
        'template_path_stack' => [
            __DIR__ . '/../view',
        ],
        /*
         * Con este array de parámetros permitimos enviar datos y no mostrar vista
         */
        'strategies' => [
            'ViewJsonStrategy',
        ],           
    ],
];
namespace Admin;

use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
use Zend\ServiceManager\Factory\InvokableFactory;

return [
    'router' => [
        'routes' => [
            'admin' => [
                'type'    => Segment::class,
                'options' => [
                    'route'    => '/admin[/:action]',
                    'defaults' => [
                        'controller' => Controller\IndexController::class,
                        'action'     => 'index',
                    ],
                ],
            ],
            'admin/articulos' => [
                'type'    => Literal::class,
                'options' => [
                    'route'    => '/admin/articulos[/:action]',
                    'defaults' => [
                        'controller' => 'Articulos',
                        'action'     => 'index',
                    ],                 
                ],
                'may_terminate' =>  true,
                'child_routes'  =>  [
                    'default'   =>[
                        'type'  =>  Segment::class,
                        'options'   =>  [
                            'route' =>  '/[:controller[/:action][/:id1]]',
                            'constraints'   =>  [
                                'controller'    =>  '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action'        =>  '[a-zA-Z][a-zA-Z0-9_-]*',
                                'id1'           =>  '[0-9_-]*'
                            ],
                            'defaults'  =>  [],
                        ],
                    ],
                ],
            ],            
        ],
    ],
    'controllers' => [
        'factories' => [
            Controller\IndexController::class => InvokableFactory::class,
            Controller\ArticulosController::class => InvokableFactory::class,
        ],
    ],
    'view_manager' => [
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => [
            'layout/layout'           => __DIR__ . '/../view/layout/layout-admin.phtml',
            'admin/index/index'       => __DIR__ . '/../view/admin/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ],
        'template_path_stack' => [
            __DIR__ . '/../view',
        ],
        /*
         * Con este array de parámetros permitimos enviar datos y no mostrar vista
         */
        'strategies' => [
            'ViewJsonStrategy',
        ],           
    ],
];
namespace Admin;

use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
use Zend\ServiceManager\Factory\InvokableFactory;

return [
    'router' => [
        'routes' => [
            'admin' => [
                'type'    => Segment::class,
                'options' => [
                    'route'    => '/admin[/:action]',
                    'defaults' => [
                        'controller' => Controller\IndexController::class,
                        'action'     => 'index',
                    ],
                ],
                'may_terminate' =>  true,
                'child_routes'  =>  [
                    'articulos' =>  [
                        'type'  =>  Segment::class,
                        'options'   =>  [
                            'route' =>  '/articulos[/:action]',
                            'defaults'  =>  [
                                'controller'    => Controller\ArticulosController::class,
                                'action'        =>  'index'
                            ],
                        ],
                    ],
                ],
            ],           
        ],
    ],
    'controllers' => [
        'factories' => [
            Controller\IndexController::class => InvokableFactory::class,
            Controller\ArticulosController::class => InvokableFactory::class,
        ],
    ],
    'view_manager' => [
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => [
            'layout/layout'           => __DIR__ . '/../view/layout/layout-admin.phtml',
            'admin/index/index'       => __DIR__ . '/../view/admin/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ],
        'template_path_stack' => [
            __DIR__ . '/../view',
        ],
        /*
         * Con este array de parámetros permitimos enviar datos y no mostrar vista
         */
        'strategies' => [
            'ViewJsonStrategy',
        ],           
    ],
];