2016-10-29 59 views
0

我有一個對象appointment,其屬性expertises的類型爲\TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Extname\Domain\Model\Expertise>
另外Expertise的一個重要特性是bool checked空的和/或過濾器ObjectStorage對象

我想在我的AppointmentController做的是:

  1. 在第一個動作:清空appointment的財產expertises(未將其設置爲NULL,我只想一個空ObjectStorage,我可以補充一下稍後)
  2. 在第二動作:填充appointmentexpertises(從一個不同的對象),其屬性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 getter這個解決方案,比如setExpertise - 只需要給這個函數一個新的存儲空間。但是前幾天我看到過有人對這個解決方案不起作用。 –

+0

我可以像這樣創建它,還是以另一種方式更好? (我有點困惑閱讀許多不同的方式來實例化對象Typo3的後)'$ emptyStorage =新\ TYPO3 \ CMS \ Extbase \持久性\ ObjectStorage();' –

回答

1

還有就是要刪除對象存儲的所有對象的簡單方法:

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

至於過濾:因爲你已經注意到了,你必須自己做。我將在模型中實現像getActiveExpertises這樣的功能,因爲它比起控制器更適合。