ZF2 文本路由不匹配


ZF2 Literal Routes are not being matched

我正在尝试使用多个站点特定模块设置Zend Framework 2。每个模块配置都包括其自己唯一命名的文本路径路由。但是,这些路由始终被忽略,以支持应用程序模块中的"主页"路由。该 URL 指向 ZF2 的索引.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,
        ),
    ),

但是,我与默认应用程序中定义的"家"匹配。如果我将主路由从"/"更改为"/不存在/",则会收到路径与路由不匹配的错误。

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

ZF2 "文字"路由与物理目录不匹配,它只是意味着文字 URI,而不是"分段"URI,例如可以采用 :action 或 :controller 等参数。

为了使该路由在示例中起作用,您需要将索引.php移动到根/,确保.htaccess正常工作并完全删除"zend"物理目录和所有子目录。

这将导致 ZF2 将文字 URI/zend/module/name/public/映射到该路由 'moduleByPath',并在必要时处理child_routes。

此外,通常对于文本路由,您将声明一个默认控制器和操作,该控制器和操作应为此 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
    ]
]

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