gpt4 book ai didi

php - AJAX 提交表单的 Symfony2 Controller 访问错误

转载 作者:可可西里 更新时间:2023-11-01 13:13:48 25 4
gpt4 key购买 nike

问题一

我想通过 ajax 提交构建注册表单。注册工作是$form->isValid()。但是,如果表单注册失败,我需要通过 ajax 返回这些错误。

if ($form->isValid()) {

}else{
$errors = $form->getErrors();
// return some json encoded errors here
}

$form->getErrors() 返回一个空数组,即使表单未通过验证(在这种情况下,我正在使用太短的用户名进行测试)。

问题2

我遇到的第二个问题是,如果表单通过验证但仍然存在错误。例如,有人尝试为其提交相同值的唯一字段。

if ($form->isValid()) {

$em = $this->getDoctrine()->getEntityManager();
$em->persist($form->getData());
$em->flush();

// error could be a username submitted more than once, username is unique field

}else{
// ...
}

如何捕获该错误并通过 json 返回它?

最佳答案

问题1

在您的表单构建器中,您可以使用 error_bubbling 将错误移至您的表单对象中。当您指定字段时,将其作为选项传入,如下所示:

$builder->add('username','text', array('error_bubbling'=>true));

并且您可以像这样访问表单对象中的错误:

$form->getErrors();

输出类似

array (
0 =>
Symfony\Component\Form\FormError::__set_state(array(
'messageTemplate' => 'Your username must have at least {{ limit }} characters.',
'messageParameters' =>
array (
'{{ value }}' => '1',
'{{ limit }}' => 2,
),
)),
) [] []

仅供引用:如果您使用的是表单/类型,则不能将 error_bubbling 设置为默认值,必须将其分配给每个字段。

有用的链接:http://symfony.com/doc/2.0/reference/forms/types/text.html#error-bubbling

问题2

http://symfony.com/doc/2.0/reference/constraints/UniqueEntity.html

关于php - AJAX 提交表单的 Symfony2 Controller 访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8029511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com