CakePHP 路由器无法解析 POST 方法
CakePHP router cannot parse POST methods
我正在开发一个 CakePHP 插件,它将是一个 Rest API 工具包并且 POST 路由没有被解析。
路由选择
问题是:Router::connect
没有使用与 GET 不同的方法解析任何操作。
我想应用常见的休息路线,例如:
GET /api/products Get all products
GET /api/products/:id Get a single product
POST /api/products Create a product
PUT /api/products/:id Update a product
DELETE /api/products/:id Delete a product
我不想使用 Router::mapResource
来做到这一点,所以我尝试了这个:
// app/Config/core.php
Configure::write('Routing.prefixes', array('api'));
// app/Config/bootstrap.php
CakePlugin::load('MY_PLUGIN', array('routes' => true));
// app/Config/routes.php
Router::parseExtensions('json');
// app/Plugin/MY_PLUGIN/Config/routes.php
Router::connect(
'/api/:controller',
array(
'prefix' => 'api',
'api' => true,
'action' => 'index',
'method' => 'GET',
)
);
Router::connect(
'/api/:controller/:id',
array(
'prefix' => 'api',
'api' => true,
'action' => 'view',
'method' => 'GET',
)
);
Router::connect(
'/api/:controller',
array(
'prefix' => 'api',
'api' => true,
'action' => 'add',
'method' => 'POST',
)
);
我创建了一个简单的控制器来测试它:
// app/Controller/ProductsController.php
public function api_index() {
die('api_index');
}
public function api_view($id = null) {
die('api_view');
}
public function api_add() {
die('api_add');
}
这是我收到的回复列表:
GET /api/products "api_index"
GET /api/products/:id "api_view"
POST /api/products "api_index"
请注意,POST 操作无法找到与其匹配的正确路由。任何人都可以向我解释并知道一个好的解决方案吗?
这是我已经尝试过的问题列表:
- CakePHP restful routes
- CakePHP REST route does not work
正如 http://book.cakephp.org/2.0/en/development/routing.html#using-additional-conditions-when-matching-routes 上的文档所指出的,您应该使用 [method] 而不是 method。
[method] Only match requests with specific HTTP verbs.
Router::connect(
'/api/:controller/*',
array(
'prefix' => 'api',
'api' => true,
'action' => 'add',
'[method]' => 'POST',
)
);
我正在开发一个 CakePHP 插件,它将是一个 Rest API 工具包并且 POST 路由没有被解析。
路由选择
问题是:Router::connect
没有使用与 GET 不同的方法解析任何操作。
我想应用常见的休息路线,例如:
GET /api/products Get all products
GET /api/products/:id Get a single product
POST /api/products Create a product
PUT /api/products/:id Update a product
DELETE /api/products/:id Delete a product
我不想使用 Router::mapResource
来做到这一点,所以我尝试了这个:
// app/Config/core.php
Configure::write('Routing.prefixes', array('api'));
// app/Config/bootstrap.php
CakePlugin::load('MY_PLUGIN', array('routes' => true));
// app/Config/routes.php
Router::parseExtensions('json');
// app/Plugin/MY_PLUGIN/Config/routes.php
Router::connect(
'/api/:controller',
array(
'prefix' => 'api',
'api' => true,
'action' => 'index',
'method' => 'GET',
)
);
Router::connect(
'/api/:controller/:id',
array(
'prefix' => 'api',
'api' => true,
'action' => 'view',
'method' => 'GET',
)
);
Router::connect(
'/api/:controller',
array(
'prefix' => 'api',
'api' => true,
'action' => 'add',
'method' => 'POST',
)
);
我创建了一个简单的控制器来测试它:
// app/Controller/ProductsController.php
public function api_index() {
die('api_index');
}
public function api_view($id = null) {
die('api_view');
}
public function api_add() {
die('api_add');
}
这是我收到的回复列表:
GET /api/products "api_index"
GET /api/products/:id "api_view"
POST /api/products "api_index"
请注意,POST 操作无法找到与其匹配的正确路由。任何人都可以向我解释并知道一个好的解决方案吗?
这是我已经尝试过的问题列表:
- CakePHP restful routes
- CakePHP REST route does not work
正如 http://book.cakephp.org/2.0/en/development/routing.html#using-additional-conditions-when-matching-routes 上的文档所指出的,您应该使用 [method] 而不是 method。
[method] Only match requests with specific HTTP verbs.
Router::connect(
'/api/:controller/*',
array(
'prefix' => 'api',
'api' => true,
'action' => 'add',
'[method]' => 'POST',
)
);