验证参数,由$ this-> request-> setArgument()设置

时间:2016-10-28 17:31:11

标签: validation typo3 fluid extbase

我有一个控制器动作,它接受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

$secondListPropertyMapper创建为数组,就好像它们是在请求中提供的一样。 ObjectStorage可以正确识别它们并进行映射,从而导致两个SubModel的{​​{1}}个实例可用作操作参数。

但问题是,没有对SubModel进行验证。 使用第一个参数验证器,但不执行第二个和第三个。

我应该以某种方式明确定义这样的验证吗?

2 个答案:

答案 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