CakePHP 3 嵌套路由设置中缺少路由

CakePHP 3 missing routes in nested routes setup

我正在尝试连接 CakePHP 3 中的嵌套路由。

我正在尝试实现以下路线(括号内为当前状态):

GET /api/users/:id/events     (Working)
POST /api/users/:id/events    (Missing Route)

GET /api/events/:id           (Working)
PATCH /api/events/:id         (Missing Route)
DELETE /api/events/:id        (Not tested)

在我的 routes.php 文件中,我有以下内容:

Router::prefix('api', function ($routes) {

    $routes->connect('/token', ['controller' => 'Users', 'action' => 'token']);

    $routes->resources('Users', function ($routes) {
        $routes->resources('Events', [
            'only' => ['index', 'add']
        ]);
    });

    $routes->resources('Events', [
        'only' => ['view', 'patch', 'delete']
    ]);
});

不工作的路由抛出 Cake\Routing\Exception\MissingRouteException

错误页面还显示了连接路线的列表,但我想要的路线不存在。是否可以按照我尝试过的方式创建嵌套资源,或者我如何能够在不手动连接每条路线的情况下连接所需的路线?

再次仔细查看文档,only 选项不支持 addpatch 值,除非您使用这些添加自定义路由默认资源映射的名称。

默认只支持以下资源路由:

  • index (= GET)
  • view(=GET/:id
  • create (= POST)
  • update(=PUTPATCH/:id
  • delete(=DELETE/:id

所以你想要使用的是 indexcreate 用于嵌套的 Users/Events 资源路由,以及 viewupdatedelete 对于非嵌套 Events 资源路由。

另见