瓦西雅核心的实体系统

发布日期:2026-03-23 10:04:50   浏览量 :3
发布日期:2026-03-23 10:04:50  
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()

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部