php - 我正在失去错误与 Symfony2 中表单字段的关联

标签 php ajax doctrine-orm symfony

我的验证看起来像

Acme\UserBundle\Entity\User:
    constraints:
        - \Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: { fields:username, message: "Username already in use" }
        - \Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: { fields:email, message: "Email address already in use" }
    properties:
        username:
            - NotBlank: ~
            - MinLength: { limit: 2, message: "Your username must have at least {{ limit }} characters." }
        email:
            - Email:
                message: The email "{{ value }}" is not a valid email.
                checkMX: true

我的 Controller 是这样的:

$form = $this->createForm(new RegistrationType());
$form->bindRequest($request);
if ($form->isValid()) {
    //... save to db
}else{
    $errors = $form->getErrors();
    //... pass the errors back as json
}

我正在尝试构建一个通过 ajax 请求提交的用户注册 Controller 。但是,当触发验证错误时,$error 变量看起来像:

[2011-11-07 19:19:44] app.INFO: array (
  0 => 
  Symfony\Component\Form\FormError::__set_state(array(
     'messageTemplate' => 'Email address already in use',
     'messageParameters' => 
    array (
    ),
  )),
  1 => 
  Symfony\Component\Form\FormError::__set_state(array(
     'messageTemplate' => 'Your username must have at least {{ limit }} characters.',
     'messageParameters' => 
    array (
      '{{ value }}' => '1',
      '{{ limit }}' => 2,
    ),
  )),
) [] []

问题是我不知道错误对应于哪个字段。有什么方法可以找到该数据,以便在我发送 json 响应时,我可以将错误消息与相关字段相关联。

最佳答案

我认为您可以单独查询每个字段,例如:

$form->get('用户名')->getErrors()

所以你可以这样构建一个数组:

$errors['username'] = $form->get('username')->getErrors();
$errors['email'] = $form->get('email')->getErrors();

不过,您也许可以将事情自动化:

$fields = $form->getChildren();
foreach ( $fields as $field ) {
    $errors[$field->getName()] = $field->getErrors();
}

我认为 getName 函数在调用表单自身的子项时应该返回字段名称。不过,其他人可能有更有效的方法...

关于php - 我正在失去错误与 Symfony2 中表单字段的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8041469/

相关文章:

php - 使用嵌套的 ManyToOne 和 OneToMany 查询复杂的 Doctrine 关系

doctrine-orm - 有没有办法在 Zend Framework 2 中将 Firebird/Ibase 与 Doctrine 一起使用?

symfony 2主义关系OneToOne

php - 使用 AJAX 传递 JavaScript 数组

php - 由于哈希 user.php,GET 无法工作?#access_token=123

javascript - 请求的资源上不存在 Access-Control-Allow-Origin header

c# - 如何通过操作结果从另一个局部 View 更新局部 View

php - 无法连接到数据库 - PHP

php - CakePHP 3 : How to display associated data for each record in index. CTP?

javascript - 我希望将返回的数据写入html的div标签中