ZF2 Literal Routes未匹配

时间:2014-12-01 14:43:00

标签: php zend-framework zend-framework2

我正在尝试使用多个站点特定模块来设置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 /',我会收到路径与路由不匹配的错误。

正确包含该模块,因为我可以添加一个路由以按域匹配,并且所有内容都正确加载。

1 个答案:

答案 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
    ]
]

希望这会有所帮助,如果我没有意义,请告诉我:)快乐编码