你好!
系列背景: 这是瓦西雅系列的第三部分。请阅读系列导言以了解整体概览,并参阅协同开发治理以了解多代码库工作流是如何管理的。
德鲁巴尔对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()
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。