2013-02-28 65 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, 
    // ... 
)); 
相關問題