我有一个控制器动作,它接受3个参数:1st是从Fluid表单构建的,另外2个是在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
的{{1}}个实例可用作操作参数。
但问题是,没有对SubModel
进行验证。
使用第一个参数验证器,但不执行第二个和第三个。
我应该以某种方式明确定义这样的验证吗?
答案 0 :(得分:1)
问题应该是ObjectStorage没有默认验证器。您可以自己设置验证:
montypython
答案 1 :(得分:0)
感谢 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。