空 and/or 过滤 ObjectStorage 对象
Empty and/or Filter ObjectStorage objects
我有一个对象 appointment
,其 属性 expertises
类型为 \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Extname\Domain\Model\Expertise>
。
另外 Expertise
的一个重要 属性 是 bool checked
。
我想在我的 AppointmentController 中做的是:
- 第一个动作:清空
appointment
的属性 expertises
(不是设置成NULL
,我只想要一个空的ObjectStorage
我可以稍后添加一些东西)
- 在第二个操作中:用
expertises
(来自不同的对象)填充appointment
,其属性 checked
等于true
从清空开始,我查看了 的答案,但它对我不起作用。
这是我试过的:
$appExp = $appointment->getExpertises();
foreach ($appExp as $exp) {
$appExp->detach($exp);
}
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($appointment);
但是显示所有expertises
还在appointment
.
在第二个动作中我这样做:
foreach ($expertises as $expertise) {
if ($expertise->getChecked()) {
$appointment->addExpertise($expertise);
}
}
有效,但我想知道是否有更简单的 "filter" 函数可以自动过滤 checked
值和 return 一个 ObjectStorage
对象。因为这样我就可以只使用 setExpertises()
而旧的会被覆盖,这将使第一步变得不必要。
那么有人对 ObjectStorage
对象的清空和过滤有想法吗?
我查看了一下 ObjectStorage Class reference 但没有明显的函数可以清空它(removeAll
ist 仅适用于当前存储 中另一个存储中包含的 对象)并且没有过滤功能。
有一种简单的方法可以从对象存储中删除所有对象:
$appointment->getExpertises()->removeAll($appointment->getExpertises());
至于过滤:正如您已经注意到的,您必须自己做。我会在模型中实现像 getActiveExpertises
这样的功能,因为它比在控制器中更适合那里。
ExtbaseObjects 中引用 ObjectStorages 的 setters 有一个默认为 null 的可选参数。只需调用不带参数的 setter 即可。您不必通过实例化一个空的 StorageObject 来浪费性能。
$appointment->setExpertises();
我有一个对象 appointment
,其 属性 expertises
类型为 \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Extname\Domain\Model\Expertise>
。
另外 Expertise
的一个重要 属性 是 bool checked
。
我想在我的 AppointmentController 中做的是:
- 第一个动作:清空
appointment
的属性expertises
(不是设置成NULL
,我只想要一个空的ObjectStorage
我可以稍后添加一些东西) - 在第二个操作中:用
expertises
(来自不同的对象)填充appointment
,其属性checked
等于true
从清空开始,我查看了
这是我试过的:
$appExp = $appointment->getExpertises();
foreach ($appExp as $exp) {
$appExp->detach($exp);
}
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($appointment);
但是显示所有expertises
还在appointment
.
在第二个动作中我这样做:
foreach ($expertises as $expertise) {
if ($expertise->getChecked()) {
$appointment->addExpertise($expertise);
}
}
有效,但我想知道是否有更简单的 "filter" 函数可以自动过滤 checked
值和 return 一个 ObjectStorage
对象。因为这样我就可以只使用 setExpertises()
而旧的会被覆盖,这将使第一步变得不必要。
那么有人对 ObjectStorage
对象的清空和过滤有想法吗?
我查看了一下 ObjectStorage Class reference 但没有明显的函数可以清空它(removeAll
ist 仅适用于当前存储 中另一个存储中包含的 对象)并且没有过滤功能。
有一种简单的方法可以从对象存储中删除所有对象:
$appointment->getExpertises()->removeAll($appointment->getExpertises());
至于过滤:正如您已经注意到的,您必须自己做。我会在模型中实现像 getActiveExpertises
这样的功能,因为它比在控制器中更适合那里。
ExtbaseObjects 中引用 ObjectStorages 的 setters 有一个默认为 null 的可选参数。只需调用不带参数的 setter 即可。您不必通过实例化一个空的 StorageObject 来浪费性能。
$appointment->setExpertises();