【问题标题】:CakePHP router cannot parse POST methodsCakePHP 路由器无法解析 POST 方法
【发布时间】: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 操作找不到与其匹配的正确路由。任何人都可以向我解释并知道一个好的解决方案吗?

这是我已经尝试过的问题列表:

  1. CakePHP restful routes
  2. CakePHP REST route does not work

【问题讨论】:

  • 如果你把'/*'放在你的路由末尾,CakePHP 将无法用同样的方法解析好路由!

标签: php cakephp


【解决方案1】:

正如http://book.cakephp.org/2.0/en/development/routing.html#using-additional-conditions-when-matching-routes 上的文档指出的那样,您应该使用 [method] 而不是方法。

[方法] 只匹配带有特定 HTTP 动词的请求。

Router::connect(
'/api/:controller/*',
array(
    'prefix' => 'api',
    'api' => true,
    'action' => 'add',
    '[method]' => 'POST',
)
);

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2016-05-17
    • 1970-01-01
    • 2013-05-16
    • 2017-04-05
    • 2014-12-09
    • 2016-04-26
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多