Symfony2 - Установить перевод домена для всей формы

Я хочу перевести форму, созданную с помощью symfony formbuilder. Поскольку я не хочу, чтобы один большой файл перевода был разделен на "домены".

Теперь я должен указать translation_domain для каждого поля формы, иначе symfony будет искать не тот файл. Этот параметр должен быть добавлен в каждое поле, и мне интересно, есть ли способ установить этот вариант для всей формы?

Пример кода я не доволен:

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

Ответы

Ответ 1

Затем вы установите его как вариант по умолчанию для своей формы, добавьте это:

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

}

к вашему методу setDefaultOptions в вашей форме.

Ответ 2

Имя метода в Ahmed теперь устарело (поскольку Symfony 2.7), способ 2.7 + сделать это:

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

так же, как вы установили настройки data_class и т.д.

Чтобы сделать это, используя только конструктор форм, в конструкторе форм есть аргумент options. Из контроллера, например:

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

Если вы используете службу FormFactory, это будет

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

Ответ 3

Или, если вы используете Factory namedBuilder, который будет:

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

Ответ 4

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
    ));
}