CakePHP3 REST API 仅触发索引方法

CakePHP3 REST API Triggers only index method

我正在尝试使用 CakePHP3 构建 RESTful API。问题是无论我发送什么类型的 HTTP 请求,它总是启动索引方法。

我的 routes.php 配置:

/**
 * REST Routes
 */
Router::scope('/articles', function (RouteBuilder $routes) {
    $routes->resources('Articles');
});

Router::scope('/users', function (RouteBuilder $routes) {
    $routes->resources('Users');
});

Router::scope('/categories', function (RouteBuilder $routes) {
    $routes->resources('Categories');
});

示例控制器如下所示:

public function initialize()
{
    parent::initialize();
    $this->autoRender = false;
    $this->response->cors($this->request)
        ->allowOrigin(['*'])
        ->allowMethods(['GET', 'POST', 'PUT', 'DELETE'])
        ->build();
}
public function index()
{
    echo 'index';
}

public function view($id = null)
{
    echo "view:".$id;
}

public function add()
{
    echo 'add';
}

我正在使用 Postman 发送 HTTP 请求。我从每种类型的请求中得到的响应是:

再次仔细查看文档,这不是您连接资源路由的方式。他们按照您的方式进行操作,即传递与资源同名的其他范围,将创建类似

的路由
/users/users

(检查 bin/cake routes 以获取所有连接路线的列表),即您访问

/users

匹配不同的路线,可能是后备路线。

您应该将路由连接到 / 范围(假设屏幕截图中的 /api/ 部分是文件夹结构的一部分),例如:

Router::scope('/', function (RouteBuilder $routes) {
    $routes->resources('Articles');
    $routes->resources('Users');
    $routes->resources('Categories');
});

这将以

的形式创建路由
/users (GET)
/users (POST)
/users/:id (GET)
etc...

另见