2013-03-27 20 views
0

我有一個下拉(選擇)一個形式的默認選項,我想選擇默認選擇的選項:Symfony2的:在設置的選擇

這是代碼生成該選擇:

$builder->add('language', 'choice', array(
     'label' => 'pages.age.gateway.language.label', 
     'choices' => array(1 => 'first option', 2 => 'second option'), 
    )); 

我已經試過以下(這裏建議,Symfony2 Setting a default choice field selection):

$builder->add('language', 'choice', array(
     'label' => 'pages.age.gateway.language.label', 
     'choices' => array(1 => 'first option', 2 => 'second option'), 
     'data' => '2' 
    )); 

這沒有我的代碼(我的Symfony2的瞭解工作,我可能不是正確的直銷薦)。

另一種選擇是使用'preferred_choices',但我想避免這種情況,因爲我不想修改選項的顯示順序。

+0

可能數組應該從'0'而不是'1'開始?否則它是一個關聯數組。 – 2013-03-27 19:32:28

+0

在Entity的構造函數中做。設置默認值,然後綁定實體形成。 – 2013-05-10 16:55:15

回答

1

如果您的形式取決於實體:

/* Action */ 
public function myAction() 
{ 
    $user = new User(); 
    $user->setLanguage(2); // Set the default option 
    $form = $this->createForm(new UserType(), $user); // Give the user to the form 

    if ($request->getMethod() == 'POST') { 

      $form->bindRequest($request); 

      if ($form->isValid()) { 

       $user = $form->getData(); 
       // Do something like save/redirect 
      } 
    } 

    return array(
     'form' => $form->createView(), 
    ); 
} 

您也可以設置一個優先的選擇(但不是真正的默認值)由於preferred_choices鍵(它的價值拉昇到選擇的頂部):

$builder->add('language', 'choice', array(
     'label' => 'pages.age.gateway.language.label', 
     'choices' => array(1 => 'first option', 2 => 'second option'), 
     'preferred_choices' => 2 
)); 
+0

「preferred_choices」選項不能是整數;它必須以某種方式穿越。它可以是一個數組,Traversable,callable,string或PropertyPath。如果沒有,你會得到一個InvalidOptionsException。 – squaretastic 2015-09-21 19:24:04

0

您想添加沒有值的選項。你可以用選項empty_value來做到這一點。

$builder 
     ->add('gender', 'choice', array(
      'label'  => 'Gender', 
      'choices' => array('male', 'female'), 
      'empty_value' => 'Please select option' 
    ));