php – Symfony2:在Form Component中注入translation_domain的位置
|
我使用Symfony 2的表单组件创建一个表单.
我使用自定义类型来捆绑我的表单信息. 我的自定义类型: use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolverInterface;
use SymfonyComponentValidatorConstraintsCollection;
use SymfonyComponentValidatorConstraintsNotBlank;
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','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()
)
);
稍后回到问题后,我找到了原因:动态translation_domain可以在setDefaultOptions中设置如下.
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
// ...
$resolver->setDefaults(array(
'constraints' => $collectionConstraint,'translation_domain' => 'customTranslationDomain'
));
}
但是,在使用的twig模板中,此translation_domain用于标签和选项,但错误消息不会与此translation_domain一起提供.它们总是在默认的树枝模板中使用相同的固定集域“验证器”进行翻译
将这些消息捆绑在一个域中通常是有意义的,但在我的情况下则不然,因为相同的约束(及其错误消息)必须根据上下文以不同的方式进行转换,并且每个上下文都是在隔离的域中组织的. 我的解决方案是customize the form rendering as described in the Symfony2 documentation,重新定义form_errors片段并使用动态translation_domain twig变量也用于错误消息输出. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
