You need to enable JavaScript to run this app. CodeIgniter 4.1.1中调用$this->request->isAJAX()报未定义方法的问题
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 4.1.1中调用$this->request->isAJAX()报未定义方法的问题

CodeIgniter 4.1.1 调用$this->request->isAJAX()报未定义方法的解决方案

错误根因

CodeIgniter 4.1.1的控制器核心属性(包括$this->request)的注入时机,是在子类构造函数执行完毕、进入控制器路由分发阶段才完成的。
你自定义Ruang控制器的时候,重写了类的构造函数但没有先调用父类构造方法,框架根本没把Request类实例绑定到$this->request属性上,此时调用对象方法自然会抛出undefined method错误。

可落地的修复方式

  • 优先使用CI4官方推荐的模型属性绑定方式,删除自定义构造函数,将模型初始化挪到类属性声明处,框架会自动调整注入时序完成实例化:
    替换原有代码片段:
    // 替换原有的属性声明
    protected $jenis = \App\Models\Mruang::class;
    
    // 彻底删除类中自定义的__construct()方法即可
    
  • 如果必须保留自定义构造函数逻辑,一定要在构造函数第一行先调用父类构造,让框架先完成核心属性的绑定,再执行自定义初始化:
    public function __construct()
    {
        // 第一行必须先执行父类构造,否则所有核心属性都是未初始化状态
        parent::__construct();
        // 再执行自己的初始化逻辑
        $this->jenis = new Mruang();
    }
    
  • 临时应急可以直接通过服务容器获取Request实例判断,不改动原有代码逻辑:
    public function tampil()
    {
        $currentRequest = \Config\Services::request();
        if ($currentRequest->isAJAX()) {
            // 原有业务逻辑保持不变
        }
    }
    

通用排查提示:只要在CI4控制器中重写构造方法后出现核心属性方法未定义的报错,90%的概率是构造函数执行顺序错位,没有第一时间调用parent::__construct()导致的。

内容的提问来源于stack exchange,提问作者BangBrow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 03:15:03