我有两个动作newAction
和createAction
。两者都获得相同的参数,这些参数是普通值,而不是对象。
他们的实现与此类似:
/**
* 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
答案 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
}