2016-10-28 6 views
0

У меня есть действие контроллера, которое принимает 3 параметра: 1-я построена из Fluid-формы, 2 других создаются в 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 не производится. С 1-м аргументом валидаторы выполняются, но не для 2-го и 3-го.

Должен ли я как-то явно определить такую ​​проверку?

ответ

0

Благодаря Димитрия 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.

1

Проблема должна заключаться в том, что для ObjectStorage отсутствуют валидаторы по умолчанию. Вы всегда можете установить проверку самостоятельно так:

* @validate $firstList \Vendor\Ext\Domain\Validator\ListValidator 
+0

Благодарим вас за этот пункт. Я думал, что объекты ObjectStorage должны быть проверены из-за рекурсивной проверки в Extbase, потому что объект MyModel содержит список 'SubModel', также связанных с ObjectStorage, и в этом случае они проверяются. Я попытался добавить 4-й параметр типа «MyModel» таким же образом, как и добавление 2-го и 3-го и его валидатор, а также проверки его свойств. Таким образом, проблема действительно в проверке аргументов типа ObjectStorage. –