2013-11-03 34 views
3

我的簡單數據轉換器將數字轉換爲實體,反之亦然。這很像official documentation中的示例。如何在Symfony中自定義DataTransformer錯誤消息?

reverseTransform方法將數字轉換爲一個實體,並且當它失敗它拋出用描述消息的TransformationFailedException

public function reverseTransform($number) 
{ 
    if (!$number) { 
     return null; 
    } 

    $issue = $this->om 
     ->getRepository('AcmeTaskBundle:Issue') 
     ->findOneBy(array('number' => $number)) 
    ; 

    if (null === $issue) { 
     throw new TransformationFailedException(sprintf(
      'An issue with number "%s" does not exist!', 
      $number 
     )); 
    } 

    return $issue; 
} 

然而使用上述變壓器表單字段得到一個一般錯誤消息「該值是無效」。即使更改異常文本(我希望用作驗證消息,但不是......)不會更改錯誤消息。

如何顯示異常文本而不是「此值無效」?

回答

4

絕對不會,因爲symfony捕獲此異常並設置自己的消息(字段不正確)。 如果您想要自定義此消息,則必須將驗證器設置爲該字段。

也許我錯了,但沒有找到任何東西。

例如:

public function reverseTransform($number) 
{ 
    if (!$number) { 
     return null; 
    } 

    $issue = $this->om 
     ->getRepository('AcmeTaskBundle:Issue') 
     ->findOneBy(array('number' => $number)) 
    ; 

    if (null === $issue) { 
     // Nothig action 
     //throw new TransformationFailedException(sprintf(
     // 'An issue with number "%s" does not exist!', 
     // $number 
     //)); 
    } 

    return $issue; 
} 

並添加NotBlank/NOTNULL驗證現場。

UPD

,你可以設置在表單類型參數 「invalid_message」。

例如:

$builder 
    ->add('you_field', 'text', array('invalid_message' => 'An issue number not found')) 
    ->get('you_field')->addModelTransformer('....'); 
+0

首先,感謝。你的方法應該工作,並至少提供一些關於發生的事情的良好用戶反饋。也許有一個「標準」的方式來做到這一點,我會尋找更好的方式(如果有的話)或接受你的答案。 – gremo

+0

我無法找到其他方法來定製此消息,但只有symfony表單捕獲此異常,而不是控制事件。 https://github.com/symfony/Form/blob/master/Form.php#L612因此,作爲解決方案,您可以使用POST_SUBMIT和控制同步屬性,但我沒有試過 – ZhukV

+0

該異常僅用於調試,而不是被揭露,所提供的答案是要走的路。否則,應該使用其中一個提交監聽器,並在適當的消息中使用'$ form-> addError(new FormError('my message'))''。無論如何,它會導致根無效,並且具有良好的映射和良好的信息。 – Heah