类库(Library)封装可复用能力,如缓存、路由、上传、输入安全等。
统一通过 \Phpcmf\Service::L() 获取实例(单例),也可使用简化函数 XR_L()。
第一个参数为类名(不区分大小写解析,文件/类名为首字母大写,如 cache → Cache.php / class Cache)。
第二个参数可选,表示应用目录名(小写),用于加载该应用 Libraries/ 下的类,或区分同名类。
同一请求内相同路径组合会复用已创建的对象。
模板标签 {Router::uri()} 等形式也会编译为对 Service::L 的调用。
路径:dayrui/Fcms/Library/,命名空间 Phpcmf\Library。禁止直接修改。常见类包括:
| 类 | 用途(概要) |
|---|---|
| Cache | 文件等缓存 |
| Router | URL / 路由辅助 |
| Input / Security / Captcha | 输入、安全、验证码 |
| Upload / Storage / File / Image | 上传、存储、文件与图片 |
| Field / Form | 字段与表单 |
| Email / Notice / Sms 相关 | 通知与邮件等 |
| Seo / Html / Page / Tree | SEO、静态、分页、树结构 |
| Http / Thread / Api / Lang / Config 等 | HTTP、任务、接口、语言、配置读写等 |
Service::L() 通过内部 _get_class_file 解析路径,行为要点如下:
默认加载核心 Fcms/Library/{Name}.php。
若存在 dayrui/My/Library/{Name}.php,则作为覆盖类加载,实例化为 \My\Library\{Name}。
传入应用名 $namespace 时,应用类库路径为:
{应用目录}/Libraries/{Name}.php
(注意目录名为 Libraries)
核心不存在该类、仅应用提供时,可直接加载应用文件,类名一般为 \Phpcmf\Library\{App}\{Name}。
推荐二次开发方式:复制或继承后放到 My,保持文件名与类名一致。
之后 Service::L('cache') 将得到 My 中的实现。勿改 Fcms/Library。
也可在应用 Config/Auto.php 中追加 PSR-4,用自定义命名空间组织更复杂的类库结构。
一个类一个文件;类名 PascalCase,与文件名一致。
系统类命名空间 Phpcmf\Library;My 覆盖为 My\Library;应用内建议 Phpcmf\Library\{应用名}。
无构造参数(由 new $className() 实例化);需配置时在方法内读取 config / 缓存,或由调用方传入参数。
保持「无请求状态污染」或在文档中声明是否有成员状态;因单例复用,避免把仅一次请求有效的脏数据长期留在属性里而不清理。
类库负责可复用逻辑;数据库持久化优先放 Model,控制器只做调度。
应用目录是 Libraries/,不是 Library/;My 层才是 My/Library/。
类文件不存在时会报错退出(API 场景可能返回 JSON)。
自动加载 PSR-4 中的 Phpcmf\Library 默认指向核心目录;应用私有类主要依赖 Service::L($name, $app) 的路径解析。