控制器部分:
$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功能 - 所以我不能使用该方法。非常感谢任何帮助:)
答案 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