[英]Validate parameters, set by $this->request->setArgument()
我有一個控制器動作,它接受3個參數:第一個是從Fluid形式構建的,另外兩個是在initialize*()
動作中創建的,並提供給請求。
protected function initializeCombinedAction()
{
// creation of ObjectStorage's $firstList and $secondList
$this->request->setArgument('firstList', $firstList);
$this->request->setArgument('secondList', $secondList);
}
/**
*
* @param \Vendor\Ext\Domain\Model\MyModel $mymodel
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Ext\Domain\Model\SubModel> $firstList
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Ext\Domain\Model\SubModel> $secondList
*/
public function combinedAction(Model\MyModel $mymodel, $firstList, $secondList)
{
// some code here
}
$firstList
和$secondList
創建為數組,就好像它們是在請求中提供的一樣。 PropertyMapper
識別它們並正確映射,從而可以將兩個ObjectStorage
的SubModel
持有實例用作操作參數。
但是問題是,沒有對SubModel
進行驗證。 對於第一個參數,將執行驗證器,但不會對第二個和第三個執行驗證器。
我應該以某種方式明確定義這種驗證嗎?
問題應該是沒有ObjectStorage的默認驗證器。 您總是可以這樣設置驗證:
* @validate $firstList \Vendor\Ext\Domain\Validator\ListValidator
感謝Dimitri L. ,我被指出了正確的方向。
答案是:Extbase會驗證所有操作參數,無論它們如何構造,但它不會自動解析ObjectStorage
類型參數的驗證器。
幸運的是,已經有內置的CollectionValidator
,可以完全用於此目的。
因此,我的初始動作簽名將如下所示:
/**
* @param \Vendor\Ext\Domain\Model\MyModel $mymodel
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Ext\Domain\Model\SubModel> $firstList
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Ext\Domain\Model\SubModel> $secondList
* @validate $firstList Collection(elementType=\Vendor\Ext\Domain\Model\SubModel)
* @validate $secondList Collection(elementType=\Vendor\Ext\Domain\Model\SubModel)
*/
public function combinedAction(Model\MyModel $mymodel, $firstList, $secondList)
{
// some code here
}
此外,我在TYPO3 Forge上創建了一個問題: #78546 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.