php – Symfony2:在Form Component中注入translation_domain的位置

前端之家收集整理的这篇文章主要介绍了php – Symfony2:在Form Component中注入translation_domain的位置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用Symfony 2的表单组件创建一个表单.
由于验证错误是在不同的翻译域中翻译的,我想在创建表单期间将此信息作为选项(translation_domain)注入,但是找不到正确(成功)的位置设置…任何提示

我使用自定义类型来捆绑我的表单信息.

我的自定义类型:

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

use Symfony\Component\Validator\Constraints\Collection;
use Symfony\Component\Validator\Constraints\NotBlank;

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一起提供.它们总是在默认的树枝模板中使用相同的固定集域“验证器”进行翻译

/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig

将这些消息捆绑在一个域中通常是有意义的,但在我的情况下则不然,因为相同的约束(及其错误消息)必须根据上下文以不同的方式进行转换,并且每个上下文都是在隔离的域中组织的.

我的解决方案是customize the form rendering as described in the Symfony2 documentation,重新定义form_errors片段并使用动态translation_domain twig变量也用于错误消息输出.

猜你在找的PHP相关文章