2013-08-07 13 views
17

Ich möchte ein Formular übersetzen, das mit symfony's formbuilder erstellt wurde. Da ich keine große Übersetzungsdatei haben möchte, ist es splitted up in "Domains".Symfony2 - Übersetzungsdomäne für ein ganzes Formular festlegen

Jetzt muss ich die translation_domain für jedes Formularfeld angeben, sonst Symfony wird in der falschen Datei suchen. Diese Option muss zu jedem Feld hinzugefügt werden, und ich frage mich, ob es eine Möglichkeit gibt, diese Option auf ein ganzes Formular zu setzen?

Beispielcode i mit nicht glücklich bin:

$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') 
); 

Antwort

49

Sie dann festlegen, der als Standardoption des Formulars haben, fügen Sie diese:

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

} 

zu Ihrem setDefaultOptions Methode, in Ihrer Form.

+0

Danke. Völlig vergessen es b/c hat es nie zuvor gebraucht. –

+1

Was ist mit einem Formular, das ohne Klasse erstellt wurde? – drskullster

+1

Jetzt ist es veraltet. Verwenden Sie stattdessen die configureOptions-Methode –

23

Der Methodenname in Ahmed ‚s Antwort jetzt (seit Symfony 2.7) ist veraltet, die 2.7+ Art und Weise, es zu tun ist:

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

auf die gleiche Art und Weise Sie setzen Ihre data_class Einstellungen usw.

Um dies nur mit dem Formular-Generator zu tun, gibt es ein options Argument auf dem Formular-Generator. Von der Steuerung, zum Beispiel:

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

Wenn Sie den FormFactory Dienst verwenden, würde dies

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

Oder im Fall verwenden Sie die namedBuilder Factory, das wäre:

$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 
    )); 
} 
Verwandte Themen