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

CodeIgniter中无数据库表关联的非模型类:命名与存放方案?

在CodeIgniter中存放非数据库绑定实体类的方案

这是个非常典型的CodeIgniter架构疑问,我来给你分享一套在标准结构下的可行方案:

一、命名规范

这类封装外部服务返回数据、和数据库表无绑定的对象,本质属于数据传输对象(DTO)或者值对象(Value Object)。命名上就用你现在的OSMAddress这种PascalCase大驼峰格式就好,直接体现它的业务含义,不需要额外加前缀或后缀,保持直观简洁就行。

二、存放位置

根据你使用的CodeIgniter版本,有两种适配的存放方式:

1. CodeIgniter 3 版本

框架默认没有专门的实体类目录,你可以手动在application目录下新建一个entities文件夹(或者叫objects、models/entities也可以,看你团队习惯),专门用来存放这类非数据库绑定的实体类。

比如你的OSMAddress类就放在:

application/entities/OSMAddress.php

为了让框架能自动加载这个类,有两种配置方式:

  • 方式一:在application/config/autoload.php里,把entities目录添加到$autoload['packages']或者自定义自动加载规则;
  • 方式二:用Composer的自动加载,在项目根目录的composer.json里添加:
"autoload": {
    "psr-4": {
        "App\\Entities\\": "application/entities/"
    }
}

然后执行composer dump-autoload,之后就可以通过命名空间use App\Entities\OSMAddress;来调用类了。

2. CodeIgniter 4 版本

CI4框架本身就内置了app/Entities目录,专门用来存放这类实体类,直接把OSMAddress.php放进去就行,框架会自动处理类的加载,完全贴合你的需求。

三、实践建议

  • 这类实体类要保持单一职责:只负责封装数据和简单的属性操作(比如给OSMAddress加一个getFullAddress()方法来格式化完整地址字符串),不要包含业务逻辑、数据库操作或者外部API调用;
  • 如果这类实体类数量较多,可以按业务模块再细分子目录,比如entities/location/OSMAddress.php,方便后续维护管理。

内容的提问来源于stack exchange,提问作者Peter K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:26:14