Codeigniter4 Grocery Crud自定义模型如何获取CI4上下文?
在CodeIgniter4中为Grocery CRUD自定义模型获取框架上下文
问题背景
要实现Grocery CRUD的自定义模型,但CodeIgniter4(CI4)已移除了CodeIgniter3(CI3)中的get_instance()全局函数,原CI3的自定义模型代码依赖该函数获取框架实例与数据库连接,无法直接在CI4中使用。
原CI3参考代码:
<?php //CustomersModel.php use GroceryCrud\Core\Model; use GroceryCrud\Core\Model\ModelFieldType; class CustomersModel extends Model { protected $ci; protected $db; function __construct($databaseConfig) { $this->setDatabaseConnection($databaseConfig); $this->ci = & get_instance(); $this->db = $this->ci->db; } public function getFieldTypes($tableName) { ... }
解决方法
CI4采用服务容器与依赖注入的设计模式,无需通过get_instance()获取框架实例,可直接通过Services类获取所需服务:
修改后的自定义模型代码
<?php //CustomersModel.php use GroceryCrud\Core\Model; use GroceryCrud\Core\Model\ModelFieldType; use Config\Services; class CustomersModel extends Model { protected $db; public function __construct($databaseConfig) { parent::__construct($databaseConfig); // 获取CI4数据库连接实例 $this->db = Services::db(); } public function getFieldTypes($tableName) { // 此处编写字段类型获取逻辑 } // 其他自定义方法实现... }
补充说明
- 如果需要获取完整的CI4应用上下文实例,可使用:
$app = \CodeIgniter\CodeIgniter::getInstance(); - CI4的
Services类可按需获取各类核心服务(如请求、响应、缓存等),推荐优先使用这种方式而非全局实例,更符合依赖注入的设计原则。
Grocery CRUD自定义模型文档(中文翻译)
什么是自定义模型?
自定义模型允许你完全控制Grocery CRUD的数据交互逻辑,替代默认的模型实现。当你需要处理复杂的业务规则、多表关联、自定义查询或非标准数据源时,自定义模型会非常有用。
自定义模型的核心要求
自定义模型必须继承GroceryCrud\Core\Model类,并实现以下核心方法:
getFieldTypes($tableName):返回指定表的字段类型信息,Grocery CRUD依赖此信息渲染表单与表格。getList($tableName, $whereClause = [], $offset = 0, $limit = 20, $sorting = [], $searchText = ''):获取列表数据,支持分页、排序与搜索。getOne($tableName, $primaryKeyValue):根据主键值获取单条记录。insert($tableName, $data):插入新记录。update($tableName, $primaryKeyValue, $data):更新指定记录。delete($tableName, $primaryKeyValue):删除指定记录。count($tableName, $whereClause = [], $searchText = ''):返回符合条件的记录总数,用于分页计算。
使用自定义模型
在控制器中初始化Grocery CRUD时,通过setModel()方法指定你的自定义模型:
$crud = new \GroceryCrud\GroceryCrud(); $crud->setModel(new \App\Models\CustomersModel($databaseConfig)); // 其他CRUD配置... $output = $crud->render();
内容的提问来源于stack exchange,提问作者Rafael Mora
相关产品推荐
相关产品推荐

