У меня есть объект appointment
со значением expertises
типа \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Extname\Domain\Model\Expertise>
.
Дополнительно одним важным свойством Expertise
является bool checked
.Пустые и/или фильтрующие объекты Объекты объектов
То, что я хочу сделать в моем AppointmentController является:
- В первом действии: Слейте имущество,
appointment
«sexpertises
(не установить егоNULL
, я просто хочу пустойObjectStorage
, что я могу добавить что-то позже) - Во втором действии: Заполнить
appointment
сexpertises
(с другого объекта), свойствоchecked
равнаtrue
Чтобы начать с опорожнения, я посмотрел на ответ от here, но это не сработало для меня.
Это то, что я пробовал:
$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);
}
}
Это работает, но мне интересно, если есть более простая функция «фильтр», который может автоматически фильтровать значение checked
и возвращает ObjectStorage
объекта. Потому что таким образом я мог бы просто использовать setExpertises()
, и старые были бы перезаписаны, что сделало бы первый шаг ненужным.
У кого-то есть идея для опорожнения и фильтрации объектов ObjectStorage
? Я немного посмотрел на ObjectStorage Class reference, но нет очевидной функции, которая опустошает его (removeAll
ist только для объектов, содержащихся в другом хранилище от текущего хранилища), и никакой функции фильтра тоже нет.
Ну, по крайней мере, чтобы очистить ObjectStorage, просто создайте новый и используйте его. Часто используя это решение для гейтеров ObjectStorage, таких как setExpertise, просто добавьте новое хранилище в эту функцию. Но несколько дней назад я видел кого-то на SO, для которого это решение не работает. –
Могу ли я создать его так или иначе, лучше? (Я немного смущен, прочитав много разных способов создания объектов в Typo3) '$ emptyStorage = new \ TYPO3 \ CMS \ Extbase \ Persistence \ ObjectStorage();' –