发生验证错误时,操作参数丢失

时间:2015-10-04 18:15:08

标签: typo3 extbase typo3-6.2.x

我有两个动作newActioncreateAction。两者都获得相同的参数,这些参数是普通值,而不是对象。

他们的实现与此类似:

/**
 * Renders a form with the createAction as action="".
 *
 * @param string $value1
 * @param boolean $value2
 *
 * @ignorevalidation $value1
 * @ignorevalidation $value2
 */
public function newAction($value1 = NULL, $value2 = NULL) {
    $this->view->assignMultiple([
        'value1' => $value1,
        'value2' => $value2,
    ]);
}

/**
 * @param string $value1
 * @param boolean $value2
 *
 * @validate $value1 NotEmpty
 * @validate $value1 EmailAddress
 * @validate $value1 \Vendor\Extkey\Validator\MyValidator
 *
 * @validate $value2 Boolean(is=TRUE)
 */
public function createAction($value1, $value2) {
    // Do some stuff
}

如果在没有参数的情况下执行newAction,一切正常,显示表单时不会预先填写字段。

如果使用有效值提交表单,则使用正确的值调用createAction,并且一切都按预期工作。

如果表单提交的值无效,则验证将失败,如预期的那样。然后请求再次转发到newAction,但是newAction的参数都是NULL,而不是之前输入到表单中的无效值。

我确保参数实际已提交(var_dump($_POST)),并且TYPO3已收到这些参数(通过在errorAction中打印)。

为什么会发生这种情况,我做错了什么?或者在那个地方打破了extbase?

TYPO3-版本:6.2.15

1 个答案:

答案 0 :(得分:3)

好的,我刚刚找到了这个原因:它是故意这样做的,以避免传递验证失败的值。 Here is the forge ticket

为了获取无效参数,可以使用$this->request->getOriginalRequest()访问原始请求。在上面的示例中执行此操作可能如下所示:

/**
 * Renders a form with the createAction as action="".
 * No more parameters here!
 */
public function newAction() {
    $originalRequest = $this->request->getOriginalRequest();
    if (NULL !== $originalRequest) {
        $this->view->assignMultiple($originalRequest->getArguments());
    }
}

/**
 * @param string $value1
 * @param boolean $value2
 *
 * @validate $value1 NotEmpty
 * @validate $value1 EmailAddress
 * @validate $value1 \Vendor\Extkey\Validator\MyValidator
 *
 * @validate $value2 Boolean(is=TRUE)
 */
public function createAction($value1, $value2) {
    // Do some stuff
}