You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:13:15