构建表单时,设置标签值的最佳位置在哪里?

时间:2014-01-12 03:14:37

标签: symfony twig

我的项目是多语言的,我还远未完成,但到目前为止,我的所有树枝模板都使用 trans 过滤器。

现在在构建表单时,我希望我的标签也能被翻译,到目前为止,这是几个formbuilder类中的一个,问题是:我应该在这里或在树枝模板内设置标签的值,这样我就可以再次使用twig'trans'过滤器?

<?php

namespace MG\AdminBundle\Form;

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

class CustomersHomesType extends AbstractType
{

    private $customersId = null;

    public function __construct($customersId){
        $this->customersId = $customersId;
;
    }
        /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('customers_id', 'hidden', array('data'=>$this->customersId,'required'=>true))
            ->add('name', 'text', array('label'=>'Name:','required'=>true))
            ->add('streetAddress1', 'text', array('label'=>'Street Address:','required'=>true))
            ->add('streetAddress2', 'text', array('label'=>'Street Address:','required'=>false))
            ->add('city', 'text', array('label'=>'City:','required'=>true))
            ->add('state', 'text', array('label'=>'State:','required'=>true))
            ->add('zipcode', 'text', array('label'=>'Zip Code:','required'=>true))
            ->add('type', 'choice', array(
                    'expanded'=>false,
                    'label'=>'Address Type:',
                    'choices'   => array('billing' => 'Billing Address ', 'work' => 'Work Address ', 'shipping'=>'Shipping Address '),
                    'required'  => true,
            ))
            ->add('subdivision', 'text', array('label'=>'Subdivision:','required'=>false))
            ->add('directions', 'textarea', array('label'=>'Directions Or Comments:','required'=>false))

            ->add('phone', 'text', array('label'=>'Phone #1:','required'=>false))
            ->add('phone2', 'text', array('label'=>'Phone #2:','required'=>false))
            ->add('save', 'submit', array('label'=>'Save'))
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'MG\AdminBundle\Entity\CustomersHomes'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'mg_adminbundle_customershomes';
    }
}

1 个答案:

答案 0 :(得分:2)

漫长的一天回答你的问题......

在表单中添加标签但使用翻译的最佳位置。

以你的形式......

->add('blah', 'text', array(
    ... etc ...
    'label' => 'vendor.bundle.field.label',
    // For bundle named Vendor\Bundle
)

然后在您的翻译文件中(位于`Resources / translations / messages。[locale]。[filetype](参见http://symfony.com/doc/current/book/translation.html)(这是YAML格式)

vendor:
    bundle:
        field:
            label: the label that you wanted to show
        field2:
            biscuits: you can call it what ever you want

通过这种方式,你可以制作一堆翻译文件,然后让你的网站多语言(提供文件在那里,它会回溯到你的设置区域设置或其他方式),而不是在日期的后期挖掘编辑实际文本。此外,您只需要稍后更新一个文件夹(或文件夹组Resources/translations),而不是编辑实际的班级数据。

同样的系统也适用于任何类型的验证,但这些转换需要放在Resources/translations/validators.[locale].[filetype]中。还是非常方便。

如果它们没有立即显示,请尝试清除缓存。