持久化 · 第 6 题,共 12 题
在 Extbase 模型中,保存多个关联对象(例如一场会议的所有演讲者)的属性应使用哪种类型?
有 1 个正确答案。 简单
显示答案
答案
- A \
TYPO3\ CMS\ Extbase\ Persistence\ ObjectStorage
解析
对于 1:n 和 m:n 关系,Extbase 使用 ObjectStorage 类,例如 protected ObjectStorage $speakers;,并为 IDE 和静态分析添加注解 @var ObjectStorage<Speaker>。通过 addSpeaker() 等方法添加条目,这些方法内部调用 attach(),用 detach() 移除。在模板中用 <f:for each="{conference.speakers}" as="speaker"> 遍历该关系。ObjectStorage 必须在访问前初始化,否则会出错。PHP 的 SplObjectStorage 看起来类似,但 Extbase 无法把关系加载到其中,也无法持久化对它的修改。