2016-10-29 2 views
0

\TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Extname\Domain\Model\Expertise>expertises 속성을 가진 appointment 개체가 있습니다.
Expertise의 중요한 속성 중 하나는 bool checked입니다.빈 개체 및/또는 ObjectStorage 개체 필터

내가 내 AppointmentController에하고 싶은 것은 :

첫 번째 액션에서
  1. : (난 그냥 내가 뭔가를 추가 할 수있는 빈 ObjectStorageNULL로 설정하지 appointment의 특성 expertises 비우기 이상)
  2. 제 행동한다 : 그 속성이 checkedtrue
,691 같음)에서 다른 오브젝트 ( expertises으로 appointment 채우기

비우기로 시작하려면 here에서 답을 보았지만 나에게 도움이되지 못했습니다.

$appExp = $appointment->getExpertises(); 
foreach ($appExp as $exp) { 
    $appExp->detach($exp); 
}  
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($appointment); 

그러나 모든 expertisesappointment 여전히 있음을 보여줍니다
이것은 내가 뭘하려합니다. 두 번째 동작에서

내가 이렇게 :

foreach ($expertises as $expertise) { 
    if ($expertise->getChecked()) { 
     $appointment->addExpertise($expertise); 
    } 
} 

그것은 작동하지만 자동으로 checked 값을 필터링하고 ObjectStorage 객체를 반환 할 수 있습니다 쉽게 "필터"기능이 있는지 궁금합니다. 이 방법을 사용하기 때문에 나는 단지 setExpertises()을 사용할 수 있으며 오래된 것들은 첫 단계를 불필요하게 만들 것입니다.

누군가가 ObjectStorage 개체를 비우거나 필터링하는 아이디어가 있습니까? ObjectStorage Class reference을 조금 보았지만 비우는 기능이 없습니다 (removeAll ist는 현재 스토리지의 다른 저장소에있는 개체를위한 것으로 필터 기능도 없음). 필터링으로

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

:

+0

음, 적어도 ObjectStorage를 비우는 것만으로 새 Object를 만들고 사용하십시오. 종종이 솔루션을 setExpertise와 같은 ObjectStorage getter에 사용합니다. 함수에 새 Storage를 지정하기 만하면됩니다. 그러나 며칠 전이 솔루션을 사용할 수없는 사람을 만났습니다. –

+0

이렇게 만들거나 다른 방법으로 개선 할 수 있습니까? (나는 Typo3에서 객체를 인스턴스화하는 여러 가지 방법에 대해 읽은 후에 약간 혼란 스럽다.) $ emptyStorage = new \ TYPO3 \ CMS \ Extbase \ Persistence \ ObjectStorage(); –

답변

1

은 쉽게 객체 저장의 모든 개체를 제거하는 방법이 이미 발견, 당신은 스스로를해야한다. 모델에 getActiveExpertises과 같은 함수를 구현할 것입니다. 왜냐하면 컨트롤러보다 훨씬 낫기 때문입니다.