我正在尝试使用多个站点特定模块来设置Zend Framework 2。每个模块配置都包含其自己唯一命名的文字路径路径。但是,这些路由始终被忽略,以支持应用程序模块中的“home”路由。 URL指向ZF2的index.php文件的物理位置。
所以,URL:localhost / zend / module / name / public /
配置:
'routes' => array(
'moduleByPath' => array(
'type' => 'Literal',
'options' => array(
'route' => '/zend/module/name/public/'
),
'may_terminate' => true,
'child_routes' => $childRoutes,
),
),
但是,我与默认应用程序中定义的“home”匹配。如果我将主路由从'/'更改为'/ doesntexist /',我会收到路径与路由不匹配的错误。
正确包含该模块,因为我可以添加一个路由以按域匹配,并且所有内容都正确加载。
答案 0 :(得分:0)
ZF2'Literal'路由与物理目录不匹配,它只是一个文字URI,而不是一个'Segment'URI,例如可以采用如:action或:controller等参数。
要使该路由在示例中起作用,您需要将index.php移动到root /,确保.htaccess正常工作并完全删除'zend'物理目录和所有子目录。
这将导致ZF2将文字URI / zend / module / name / public /映射到该路由'moduleByPath',并在必要时处理child_routes。
此外,通常对于Literal路由,您将声明一个默认控制器和应为此URI加载的操作,如下所示:
<?php
return [
'routes' => [
'api' => [
'type' => 'Literal',
'options' => [
'route' => '/api',
'defaults' => [
'controller' => 'api',
'action' => 'index',
],
],
'may_terminate' => true,
'child_routes' => [
// ...
]
]
]
];
例如。确保您在配置中声明控制器'api'可以调用:
<?php
// ...
'controllers' => [
'invokables' => [
'api' => 'MoudleName\Controller\ApiController'
// ... other invokables
]
]
希望这会有所帮助,如果我没有意义,请告诉我:)快乐编码