私はZF2の開発者です。私はZF3に移行しており、いくつかのコントローラに問題があります。ZF3:子ルートのコントローラが動作しません
たとえば、私はこのURLを持っています:http://localhost/admin正しいコントローラ(IndexController)を呼び出し、正しいビューを表示します。しかし、私がこのURL:http://localhos/admin/articuloとArticuloControllerを関連づけたいのであれば動作しません。私はこのURLを呼び出します:http://localhost/admin/articuloコントローラはAdminControllerであり、ビューは見つかりません。
OPTION 1 => module.config.php:
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',
],
],
];
OPTION 2 => module.config.php(ZF2スタイル):
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',
],
],
];
OPTION 3 = > module.config.php(次のzf3チュートリアル): https://docs.zendframework.com/zend-mvc/routing/#http-routing-examples
構成のすべてのために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',
],
],
];
私はURLを呼び出す:あなたはと呼ばれるコントローラが管理\コントローラ\ IndexControllerであることがわかります私が手http://localhost/admin/articulos図である...
とないAdmin \ Controller \ ArticulosController
私は間違っていますか?
更新1:
オプション3の設定は問題ありません。 ...私はテンプレートをレンダリング今エラーを持っている...私は、キャッシュディレクトリ/からすべてのコンテンツを削除しており、今でコントローラが検出されたが、
メッセージ:
のZend \ビュー\レンダラー\ PhpRenderer ::レンダー:テンプレートをレンダリングすることができません "admin/articulos/index";
0 /var/www/html/31juegos/vendor/zendframework/zend-view/src/View.php(207):リゾルバは、スタックトレース
ファイルに解決できませんでした: Zendの\ビュー\レンダラは\ PhpRenderer->()
1 /var/www/html/31juegos/vendor/zendframework/zend-view/src/View.php(236)レンダリング: のZend \ビュー\ビュー - >レンダリング(オブジェクト(Zend \ View \ Model \ ViewModel))
2 /var/www/html/31juegos/vendor/zendframework/zend-view/src/View.php(200): Zend \ View \ View-> renderChildren(Object(Zend \ View \ Model \ ViewModel))
3/var/www/html/31juegos/vendor/zendframework/zend-mvc/src/View/Http/DefaultRenderingStrategy。PHP(105):
のZend \ビュー\ [表示] - >レンダリング(オブジェクト(Zendの\ビュー\モデル\ ViewModelに))
4/var/www/htmlと設定/ 31juegos /ベンダー/ zendframework/Zendの-eventmanager /src/EventManager.php(322): のZend \ MVC \ビュー\のHttp \ DefaultRenderingStrategy->レンダリング(オブジェクト(Zendの\ MVC \ MvcEvent))
5/var/www/htmlと設定/ 31juegos /ベンダー/ zendframework /zend-eventmanager/src/EventManager.php(171): Zendの\ EventManager \ EventManager-> triggerListeners(オブジェクト(Zendの\ MVC \ MvcEvent))
6の/ var/WWW/HTML/31juegos /ベンダー/ zendframewo RK/Zendの-MVC/SRC/Application.php(367): のZend \ EventManager \ EventManager->のTriggerevent(オブジェクト(Zendの\ MVC \ MvcEvent))
7/var/www/htmlと設定/ 31juegos /ベンダー/ zendframework/Zendの-MVC/SRC/Application.php(348): のZend \ MVC \応用 - > completeRequest(オブジェクト(Zendの\ MVC \ MvcEvent))
8/var/www/htmlと設定/ 31juegos /公共/ index.phpを(40):Zendの\ MVC \アプリケーション - >ラン()
9 {メイン}
これは、この問題は、もはや再現できない問題や簡単な誤字によって引き起こされた_のために閉じられていることをお勧めします。 – halfer