2013-02-28 69 views
6

我正在一个语言选择形式:如何使用Symfony 2预先选择表格单选项?

$currentLocale = "en_US"; // This is indeed sent to the formType 

    $langs = array(
     'fr_FR' => 'fr', 
     'en_US' => 'en' 
     ); 

    $builder->add('language', 'language', array(
     'choices' => $langs, 
     'expanded' => true, 
     'multiple' => false, 
     'required' => false, 
     'label' => false, 
    )); 

的HTML代码如下所示(简化):

<div id="languageForm_language"> 
    <input type="radio" value="fr_FR"> 
    <input type="radio" value="en_US"> 
</div> 

我怎么能获得的第二项预先选定的,根据$currentLocale值?

+0

这个表单是否也绑定到数据对象,还是它是一个'普通'形式? – Sean 2013-02-28 12:07:46

回答

11

在你$langs阵列可以指定这样的键值对:

array(
    0 => 'value1', 
    1 => 'value2' 
) 

现在,如要预选value2,你可以从value2设置data属性的关键:

$builder->add('language', 'choice', array(
    'choices' => $langs, 
    'expanded' => true, 
    'multiple' => false, 
    'required' => false, 
    'label' => false, 

    'data' => 1 
)); 

根据这一点,您可以将data属性设为您的$currentLocale变量预选它。 您的代码看起来应该是这样:

$currentLocale = "en_US"; // This is indeed sent to the formType 

$langs = array(
    'fr_FR' => 'fr', 
    'en_US' => 'en' 
); 

$builder->add('language', 'choice', array(
    'choices' => $langs, 
    'expanded' => true, 
    'multiple' => false, 
    'required' => false, 
    'label' => false, 
    'data' => $currentLocale 
)); 

注:add()方法的第二个参数应该是choicelanguage

+1

我刚试过,第二个参数有错,'languante'应该是'choice',因为它是一个选择字段。此代码适用于我 – bpoiss 2013-02-28 13:32:09

+0

我了解我的代码应该可以工作。但是,它仍然不适合我......我想我错过了某个地方... – Yako 2013-02-28 13:38:01

+0

您将第二个参数更改为'choice?'编辑我的答案,添加了适合我的代码 – bpoiss 2013-02-28 13:38:23

5

如果窗体与模型对象使用,只需设置对象本身的语言将它传递给表单之前:

$object->setLanguage($currentLocale); 
$form = $this->createForm('some_form_type', $object); 

否则,设置data option为默认语言键:

$builder->add('language', 'language', array(
    'choices' => $langs, 
    'data' => $currentLocale, 
    // ... 
)); 
相关问题