2013-08-07 16 views
17

Chcę przetłumaczyć formularz utworzony za pomocą konstruktora symfony. Ponieważ nie chcę jednego dużego pliku tłumaczeniowego, to jest on w domenie "splitted up".Symfony2 - Ustaw domenę tłumaczenia dla całego formularza

Teraz muszę podać translation_domain dla każdego pola formularza, inaczej symfony będzie szukał niewłaściwego pliku. Ta opcja musi być dodana do każdego pola i zastanawiam się, czy istnieje sposób na ustawienie tej opcji na cały formularz?

kod Próbka nie jestem zadowolony z:

$builder->add(
    'author_name', 
    'text', 
    array('label' => 'Comment.author_name', 'translation_domain' => 'comment') 
)->add(
    'email', 
    'email', 
    array('label' => 'Comment.email', 'translation_domain' => 'comment') 
)->add(
    'content', 
    'textarea', 
    array('label' => 'Comment.content', 'translation_domain' => 'comment') 
); 

Odpowiedz

49

Masz następnie ustawić ją jako domyślną opcją formularza, należy dodać to:

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{  
    $resolver->setDefaults(array(
     'translation_domain' => 'comment' 
    )); 

} 

aby Twój setDefaultOptions metoda, w twojej formie.

+0

Dzięki. Całkowicie zapomniany b/c nigdy go nie potrzebował. –

+1

A co z formularzem utworzonym bez zajęć? – drskullster

+1

Teraz jest przestarzałe. Zamiast tego użyj metody configureOptions –

23

Nazwa metody w odpowiedzi Ahmed „s jest teraz przestarzała (od Symfony 2.7), przy czym 2.7+ sposób to zrobić to:

/** 
* Configures the options for this type. 
* 
* @param OptionsResolver $resolver The resolver for the options. 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefault('translation_domain', 'messages'); 
} 

w ten sam sposób ustawić ustawienia data_class itd

Aby to zrobić za pomocą kreatora formularzy, w konstruktorze formularzy znajduje się argument options. Ze sterownika, na przykład:

$form = $this->createFormBuilder($entity, ['translation_domain' => 'messages'])->add(..)->getForm(); 

Jeśli korzystasz z usługi FormFactory, to byłoby

$formFactory->createBuilder('form', $entity, ['translation_domain' => 'messages']); 
2

lub w przypadku korzystania namedBuilder fabryce, że byłoby:

$formBuilder = $this->get('form.factory')->createNamedBuilder('myForm', 'form', $data, array(
    'translation_domain' => 'forms', 
)); 
0

Symfony 3

/** 
* Configures the options for this type. 
* 
* @param OptionsResolver $resolver The resolver for the options. 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'translation_domain' => 'forms', 
     // Add more defaults if needed 
    )); 
}