Php ZF2文字路由不匹配

Php ZF2文字路由不匹配,php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,我正在尝试使用多个站点特定的模块设置Zend Framework 2。每个模块配置都包含自己的唯一命名文字路径路由。但是,这些路由总是被忽略,而应用程序模块中的主路由则被忽略。URL指向ZF2的index.php文件的物理位置 所以,URL:localhost/zend/module/name/public/ 配置: 'routes' => array( 'moduleByPath' => array( 'type' => 'Litera

我正在尝试使用多个站点特定的模块设置Zend Framework 2。每个模块配置都包含自己的唯一命名文字路径路由。但是,这些路由总是被忽略,而应用程序模块中的主路由则被忽略。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/”,我会得到一个错误,即路径与路由不匹配


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

ZF2“Literal”路由与物理目录不匹配,它只是指一个Literal URI,而不是一个“Segment”URI,例如,它可以采用诸如:action或:controller等参数

要使该路由在示例中正常工作,您需要将index.php移到root/,确保.htaccess正常工作,并完全删除“zend”物理目录和所有子目录

这将导致ZF2将文本URI/zend/module/name/public/映射到该路由“moduleByPath”,并在必要时处理子路由

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

希望这能有所帮助,如果我说的不合理,请告诉我:Happy coding

你是说/zend/module/name/public/是一个物理目录吗?是的。这就是index.php文件所在的位置。