CodeIgniter中PUT等REST请求无法正常工作求助
排查CodeIgniter RESTful服务器PUT/POST/DELETE请求异常问题
我来帮你梳理下问题的核心原因和解决办法,你遇到的{"":false}错误其实是REST_Controller框架的默认错误响应,说明请求没有正确匹配到对应的处理方法:
1. 核心问题:REST_Controller的方法命名规范没遵守
你用的这个REST_Controller(Phil Sturgeon版本)是基于请求方法自动路由到对应命名的方法的,比如:
- PUT请求要对应
xxx_put()方法 - POST请求要对应
xxx_post()方法 - DELETE请求要对应
xxx_delete()方法
你现在把所有请求的判断逻辑塞到put_info()里,框架根本识别不到POST/DELETE请求对应的处理方法,自然返回错误响应{"":false}。
2. 修正代码:拆分请求方法到对应处理函数
把你的代码改成下面这样,严格遵循框架的命名规则:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); require(APPPATH.'/libraries/Rest_controller.php'); class Api extends REST_Controller{ public function __construct() { parent::__construct(); $this->load->database(); $this->load->model('book_model'); // 预设响应格式为JSON,避免格式混乱 $this->response->format = 'json'; } // 专门处理PUT请求的方法 function info_put() { // 用框架封装的方法获取PUT数据,比input_stream更可靠 $put_params = $this->put(); var_dump($put_params); // 用框架的response方法返回数据,不要直接echo $this->response([ 'status' => 'success', 'message' => 'This is PUT request', 'data' => $put_params ]); } // 专门处理POST请求的方法 function info_post() { $post_params = $this->post(); var_dump($post_params); $this->response([ 'status' => 'success', 'message' => 'This is POST request', 'data' => $post_params ]); } // 专门处理DELETE请求的方法 function info_delete() { $delete_params = $this->delete(); var_dump($delete_params); $this->response([ 'status' => 'success', 'message' => 'This is DELETE request', 'data' => $delete_params ]); } } ?>
3. 额外注意事项
- 不要手动判断
REQUEST_METHOD:框架已经帮你完成了请求路由,手动判断会打乱框架的逻辑 - 用框架方法获取请求数据:
$this->put()、$this->post()、$this->delete()是框架封装的安全方法,比直接操作input_stream或原生超全局变量更可靠 - 用
$this->response()返回结果:直接echo会导致框架的响应格式失效,出现奇怪的错误输出 - 检查路由配置:确保
application/config/routes.php里有正确的路由映射,比如:$route['api/info'] = 'api/info'; // 如果需要带ID参数,可添加: $route['api/info/(:num)'] = 'api/info/$1';
按照上面的步骤修改后,用Postman测试对应请求方法,应该就能正常响应了。
内容的提问来源于stack exchange,提问作者rharmed
相关产品推荐
相关产品推荐

