2013-11-03 3 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

심포니가이 예외를 포착하고 자신의 메시지를 설정했기 때문에 (필드가 올바르지 않음). 이 메시지를 사용자 정의하려면이 필드에 유효성 검사기를 설정해야합니다.

내가 틀렸을 수도 있지만 아무 것도 찾지 못했을 수도 있습니다.

예를 들어

:

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 양식 만이 제어 예외 이벤트를 catch합니다. https://github.com/symfony/Form/blob/master/Form.php#L612 솔루션으로 POST_SUBMIT를 사용하여 동기화 된 속성을 제어 할 수 있지만 시도하지 않았습니다. – ZhukV

+0

예외는 디버그 전용입니다. 노출 될 수있는 방법은 제공되는 대답입니다. 그렇지 않으면 적절한 메시지가있는 올바른 필드에 submit listener 중 하나를 사용하고'$ form-> addError (새로운 FormError ('my message'))'를 사용해야합니다. 어쨌든 좋은 매핑과 좋은 메시지로 루트가 무효화됩니다. – Heah