CakePHP3 REST API仅触发索引方法

时间:2017-01-15 19:19:41

标签: php rest cakephp url-routing cakephp-3.0

我正在尝试使用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请求。我从各种类型的请求得到的回应是:

enter image description here

1 个答案:

答案 0 :(得分:3)

再次仔细查看文档,而不是如何连接资源路由。他们这样做,即传递与ressource同名的其他作用域,会创建像

这样的路径
/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...

另见