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

Parameters to action lost when validation error occurs

我有两个动作,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

好的,我刚刚找到了原因:这是故意这样做的,以避免传递验证失败的值。 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
}