2016-10-29 2 views
0

У меня есть объект appointment со значением expertises типа \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Extname\Domain\Model\Expertise>.
Дополнительно одним важным свойством Expertise является bool checked.Пустые и/или фильтрующие объекты Объекты объектов

То, что я хочу сделать в моем AppointmentController является:

  1. В первом действии: Слейте имущество, appointment «s expertises (не установить его NULL, я просто хочу пустой ObjectStorage, что я могу добавить что-то позже)
  2. Во втором действии: Заполнить 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 только для объектов, содержащихся в другом хранилище от текущего хранилища), и никакой функции фильтра тоже нет.

+0

Ну, по крайней мере, чтобы очистить ObjectStorage, просто создайте новый и используйте его. Часто используя это решение для гейтеров ObjectStorage, таких как setExpertise, просто добавьте новое хранилище в эту функцию. Но несколько дней назад я видел кого-то на SO, для которого это решение не работает. –

+0

Могу ли я создать его так или иначе, лучше? (Я немного смущен, прочитав много разных способов создания объектов в Typo3) '$ emptyStorage = new \ TYPO3 \ CMS \ Extbase \ Persistence \ ObjectStorage();' –

ответ

1

Существует простой способ, чтобы удалить все объекты из хранилища объекта:

$appointment->getExpertises()->removeAll($appointment->getExpertises()); 

Что касается фильтрации: как вы уже заметили, что Вы должны сделать это самостоятельно. Я бы реализовал такие функции, как getActiveExpertises в Модели, потому что он там намного лучше, чем в контроллере.

Смежные вопросы