【发布时间】:2015-03-30 03:33:29
【问题描述】:
我正在开发一个 CakePHP 插件,它将是一个 Rest API 工具包,并且 POST 路由没有被解析。
路由
问题是:Router::connect 没有使用与 GET 不同的方法解析任何操作。
我想应用常见的 Rest 路线,例如:
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 将无法用同样的方法解析好路由!