Php Symfony2 controller for AJAX提交表单中的访问错误
问题1 我想通过ajax提交构建一个注册表单。注册工作是Php Symfony2 controller for AJAX提交表单中的访问错误,php,doctrine-orm,symfony,Php,Doctrine Orm,Symfony,问题1 我想通过ajax提交构建一个注册表单。注册工作是$form->isValid()。但是,如果表单注册失败,我需要通过ajax返回这些错误 if ($form->isValid()) { }else{ $errors = $form->getErrors(); // return some json encoded errors here } $form->getErrors()返回一个空数组,即使表单没有验证(在本例中,我使用的用户名太短) 问题2 我遇到
$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
错误不在表单本身上Form::getErrors
仅当表单对象本身存在任何错误时才会返回错误。您需要遍历表单并检查每个子项上的错误
Form::isValid
相反,只需遍历子项并检查其中是否有无效项
问题2
如果验证后仍然存在“错误”,则表示您的验证未完成。如果您的应用程序需要非标准约束,您应该继续编写自定义约束。有关更多信息,请参阅。问题1
在表单生成器中,您可以使用错误\u冒泡
将错误移动到表单对象中。指定字段时,将其作为选项传入,如下所示:
$builder->add('username','text', array('error_bubbling'=>true));
$form->getErrors();
您可以访问表单对象中的错误,如下所示:
$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,
),
)),
) [] []
仅供参考:如果您使用表单/类型,则不能将错误\u冒泡设置为默认值,必须将其分配给每个字段
有用链接:
问题2
验证器如何知道有人已经在表中使用了该用户名?我认为验证器检查的是数据是否正确,而不是数据是否已经存在,或者它是否同时做这两件事?验证器可以执行任何类型的验证。当然,正如已经提到的,已经有了唯一性的验证器,uniquentity。