簡體   English   中英

驗證參數,此參數由$ this-> request-> setArgument()設置

[英]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識別它們並正確映射,從而可以將兩個ObjectStorageSubModel持有實例用作操作參數。

但是問題是,沒有對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM