你好!
系列背景: 这是瓦西雅系列的第3部分。请阅读系列导言以了解整体概览,并参阅协同开发治理一文,了解多代码库工作流是如何被管理的。
德鲁巴尔对PHP内容管理系统最大的贡献并非其用户界面或模块生态系统——而是其实体/字段模型。该模型的核心理念在于:内容类型是由带类型的字段所构成的配置;任何内容类型都可以拥有任意字段;字段自身携带存储逻辑与验证逻辑。正是这一理念,使德鲁巴尔具备了足够的灵活性,能够对几乎任何内容领域进行建模。
瓦西雅继承了这一模型,并针对PHP 8.4及以上版本进行了重写,采用了现代化的类型声明以及赛门福的依赖注入机制。本文将介绍实体系统的工作原理,以及结构化的AI上下文如何使其在多个会话中持续构建而不丧失架构的一致性。
实体接口
框架中的每个实体都实现了EntityInterface。该契约极为精简:
interface EntityInterface
{
public function id(): int|string|null;
public function uuid(): string;
public function label(): string;
public function getEntityTypeId(): string;
public function bundle(): string;
public function isNew(): bool;
public function toArray(): array;
public function language(): string;
}
该契约中有几点对框架其余部分的运作至关重要:
id()返回int|string|null——之所以允许为空,是因为尚未保存的新实体尚无ID。isNew()正是基于这一点:当实体的ID为null时(或通过enforceIsNew()显式强制时),该实体即被视为新实体。
bundle()用于支持实体子类型。例如,node(节点)实体类型可以拥有诸如article(文章)或page(页面)等不同的捆绑包(bundle),每种捆绑包可定义不同的字段。若未设置捆绑包键,则默认使用实体类型ID本身作为捆绑包。
toArray()
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。