symfony2无法正确验证

时间:2013-11-15 17:57:41

标签: php validation symfony

控制器部分:

        $contact->setEmail($request->request->get('email'))
                ->setFirstName($request->request->get('firstname'))
                ->setLastName($request->request->get('lastname'))
                ->setSource($request->request->get('source'))
                ->setIpAddress($request->request->get('ipaddr'))
                ->setCreated(new \DateTime());

        $validator = $this->get('validator');
        $this->errors = $validator->validate($contact);

        $response = new Response(json_encode(
          array(
            'errors'=>$this->errors
          )
        ));
        return $response;

validation.yml:

Mailer\MainBundle\Entity\Contact:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: email
    properties:
        email:
            - Email:
                message: The email you entered is invalid
                checkMX: false
        ipAddress:
            - Ip: ~
        source:
            - Length:
                min: 2
                max: 50
                minMessage: Must be between 2 and 50 characters
                maxMessage: Must be between 2 and 50 characters
无论输入内容是什么,

$ this->错误总是作为空对象出现。这个相同实体的验证在其他控制器中有效,但我通过$ form-> isValid()方法进行验证。该控制器用于API功能 - 所以我不能使用该方法。非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:3)

我有类似的问题。问题不在于验证器。问题是由于json_encode不能很好地处理某些对象而引起的。在这种情况下,如果您创建一个包含所有错误的字符串或简单数组,然后将字符串/数组作为json返回,它应该可以工作。

$messages = array();
foreach($this->errors as $error){
    $messages[] = $error->getMessage();
}
$response = new Response(json_encode(
      array(
        'errors'=>$messages
      )
));
return $response;

OR

$messages = '';
foreach($this->errors as $error){
    $messages .= $error->getMessage() . ";";
}
$response = new Response(json_encode(
      array(
        'errors'=>$messages
      )
));
return $response;

这就是用json_encode解决了我的问题。希望它也适合你。

编辑: 看起来验证器返回一个资源。 json_encode无法编码资源。见php docs