我想翻译一个用symfony的formbuilder创建的表单。由于我不想要一个大的翻译文件,因此splitted up为“域名”。
现在我必须为每个表单字段指定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')
);
答案 0 :(得分:52)
然后,您可以将其设置为表单的默认选项,添加:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'translation_domain' => 'comment'
));
}
以您的setDefaultOptions
方式填写表单。
答案 1 :(得分:26)
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']);
答案 2 :(得分: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
));
}
答案 3 :(得分:2)
Or in case you use the Factory's namedBuilder that would be:
$formBuilder = $this->get('form.factory')->createNamedBuilder('myForm', 'form', $data, array(
'translation_domain' => 'forms',
));