2012-11-08 3 views
6

을 translation_domain를 주입 어디 심포니 2. 유효성 검사 오류로 의 다른 번역 도메인에 번역 된 형태의 구성 요소를 사용하여 양식을 작성, 나는 (translation_domain) 옵션으로이 정보를 삽입 할 양식을 만드는 동안 올바른 위치를 찾지 못했습니다. 어디에서 설정해야합니까? 힌트가 있습니까?Symfony2는 : 양식의 구성 요소

양식 정보를 묶는 데 사용자 정의 유형을 사용합니다.

내 사용자 정의 유형 클래스 : 컨트롤러에서 양식 작성에

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

use Symfony\Component\Validator\Constraints\Collection; 
use Symfony\Component\Validator\Constraints\NotBlank; 

class LoginType extends AbstractType 
{ 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $collectionConstraint = $collectionConstraint = new Collection(array(
      'password' => array(new NotBlank(array('message' => 'custom.error.blank'))), 
      'username' => array(new NotBlank(array('message' => 'custom.error.blank'))) 
     )); 

     $resolver->setDefaults(array(
      'constraints' => $collectionConstraint 
     )); 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('username', 'text', array(
      'max_length'  => 250, 
      'trim'    => true 
     )); 
     $builder->add('password', 'password', array(
      'max_length'  => 250, 
      'trim'    => true 
     )); 
    } 

    public function getName() 
    { 
     return 'login'; 
    } 
} 

관련 코드 조각 :

$loginForm = $this->createForm(new LoginType(), $loginDefaultData); 

$loginForm->bind($request); 

[...] 

return $this->render(
    'MyBundle:SubFolder:login.html.twig', 
    array(
     'loginForm' => $loginForm->createView() 
    ) 
); 

답변

8

잠시 나중에 문제로 돌아 오면, 나는 이유를 발견 : 동적 translation_domain 수 setDefaultOptions 내에서 설정됩니다.

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    // ... 

    $resolver->setDefaults(array(
     'constraints'  => $collectionConstraint, 
     'translation_domain' => 'customTranslationDomain' 
    )); 
} 

그러나, 사용 된 나뭇 가지 템플릿이 translation_domain 라벨 및 옵션을 사용되지만 오류 메시지가이 translation_domain와 함께 제공되지 않습니다. 그들은 항상

에서 기본 나뭇 가지 템플릿 같은 고정 설정 도메인 '유효성 검사기'로

/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig

를 환산하고 있으며, 그것은 동일한 제약 조건 (및 오류 메시지)이 컨텍스트에 따라 다른 방법으로 변환되어야하고 각 컨텍스트가 격리 된 도메인에서 구성되어야하기 때문에 일반적으로 이러한 메시지를 하나의 도메인에 묶는 것이 좋습니다.

해결 방법은 customize the form rendering as described in the Symfony2 documentation이고 form_errors 조각을 다시 정의하고 오류 메시지 출력에도 dynamic translation_domain twig 변수를 사용하십시오.

관련 문제