Library 开发与调用

类库(Library)封装可复用能力,如缓存、路由、上传、输入安全等。

统一通过 \Phpcmf\Service::L() 获取实例(单例),也可使用简化函数 XR_L()

调用方式

  • 第一个参数为类名(不区分大小写解析,文件/类名为首字母大写,如 cacheCache.php / class Cache)。

  • 第二个参数可选,表示应用目录名(小写),用于加载该应用 Libraries/ 下的类,或区分同名类。

  • 同一请求内相同路径组合会复用已创建的对象。

模板标签 {Router::uri()} 等形式也会编译为对 Service::L 的调用。

系统内置类库目录

路径:dayrui/Fcms/Library/,命名空间 Phpcmf\Library禁止直接修改。常见类包括:

用途(概要)
Cache文件等缓存
RouterURL / 路由辅助
Input / Security / Captcha输入、安全、验证码
Upload / Storage / File / Image上传、存储、文件与图片
Field / Form字段与表单
Email / Notice / Sms 相关通知与邮件等
Seo / Html / Page / TreeSEO、静态、分页、树结构
Http / Thread / Api / Lang / Config 等HTTP、任务、接口、语言、配置读写等

加载优先级

Service::L() 通过内部 _get_class_file 解析路径,行为要点如下:

  1. 默认加载核心 Fcms/Library/{Name}.php

  2. 若存在 dayrui/My/Library/{Name}.php,则作为覆盖类加载,实例化为 \My\Library\{Name}

  3. 传入应用名 $namespace 时,应用类库路径为:
               {应用目录}/Libraries/{Name}.php
               (注意目录名为 Libraries

  4. 核心不存在该类、仅应用提供时,可直接加载应用文件,类名一般为 \Phpcmf\Library\{App}\{Name}

覆盖系统类库(My)

推荐二次开发方式:复制或继承后放到 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) 的路径解析。

本文地址:https://m.xunruicms.com/doc/xunrui/1486.html