2013-11-15 101 views
1

控制器部分:Symfony2中沒有驗證正確

 $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 

$這個 - >錯誤永遠是爲不管是什麼輸入一個空對象。驗證這個實體在其他控制器中工作,但我通過$ form-> isValid()方法驗證了這些。此控制器用於API功能 - 所以我不能使用該方法。任何幫助非常感謝:)

回答

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

+0

非常感謝你 - 這是完美的:) – skrilled