CakePHP 3 - 通过routes.php设置时找不到控制器

时间:2017-02-07 17:59:37

标签: cakephp

尝试使用测试API。根据以下路由设置,如果我请求/v1/tests/index.json,我将按预期获得JSON对象响应,但如果我请求/v1/test/index.json,我将收到TestController丢失的错误。我检查了文档,我似乎无法弄清楚出了什么问题。我希望$routes->connect('/test', [...]);可以正常工作,但事实并非如此。任何帮助照亮这一点的人都会受到赞赏。

<?php
use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;

Router::defaultRouteClass('DashedRoute');
Router::extensions(['json', 'xml']);

Router::scope('/', function (RouteBuilder $routes) {
    $routes->prefix('v1', function (RouteBuilder $routes) {
        $routes->connect('/test', ['controller' => 'Tests', 'action' => 'index']);
        $routes->fallbacks('InflectedRoute');
    });

    $routes->fallbacks('DashedRoute');

});

Plugin::routes();

2 个答案:

答案 0 :(得分:2)

没有明确的路线设置匹配/v1/test/index.json。您的:

$routes->connect('/test', ['controller' => 'Tests', 'action' => 'index']);

路线将匹配/v1/test/v1/test.json|xml,而这就是全部。

/v1/test/index.json将被后备路由捕获,因此尝试连接到匹配test的控制器,即TestController

更仔细地查看 Cookbook > Routing > Connecting Routes ,您正在执行/government示例中显示的内容。

答案 1 :(得分:1)

您是否尝试在路由连接中指定操作?

$routes->connect('/test/index', ['controller' => 'Tests', 'action' => 'index']);