Symfony2默认选择单选按钮

时间:2013-03-13 14:43:38

标签: forms symfony radio-button default selected

我知道网络上有很多关于此话题的论坛。 然而,非解决方案实际上对我有用,虽然这个问题看起来很简单。

我想预先选择我的symfony2格式的单选按钮:

我的实体:

namespace Helloworld\CoreBundle\Entity;

class User {
   ...

   /**
    * @var string
    *
    * @ORM\Column(name="gender", type="string", length=6)
    * @Assert\Choice(choices = {"male","female"}, multiple = false, message = "You must choose a valid gender.")
    */
   protected gender;

   ...
}

(Getters和setter在那里)

我的PHP代码:

$user = new User();
$user->setGender('male');

$form = $this->createFormBuilder($user)
    ->add('gender', 'choice', array(
        'choices' => array(
          'male' => 'Male',
          'female' => 'Female'
        ),
        'multiple' => false,
        'expanded' => true,
        'required' => true,
    ))
    ->getForm();

现在,遗憾的是,默认情况下没有选择单选按钮!

有人可以帮忙吗? 请?

4 个答案:

答案 0 :(得分:1)

我认为您需要在创建表单之前保留(和/或刷新?)您的实体,因此该实体具有ID等。 (这是预先选择单选按钮的糟糕方式)

答案 1 :(得分:1)

如果你想预先选择表格中的按钮,请尝试使用'data'属性和所选数组中的所需键,例如:

->add('gender', 'choice', array(
        'choices' => array(
          'male' => 'Male',
          'female' => 'Female'
        ),
        'multiple' => false,
        'expanded' => true,
        'required' => true,
        'data'     => 'male'
    ))

答案 2 :(得分:0)

对我来说,具有价值' male'的单选按钮似乎很合乎逻辑。将被选中,因为您的实体已经拥有男性'作为性别。这是symfony2框架的预期行为。

如果您不希望默认情况下未选中单选按钮,则在将实体传递给表单构建器之前,不要将性别设置为该实体。

$user = new User();
$user->setGender('male'); //<- remove this line

$form = $this->createFormBuilder($user)
    ->add('gender', 'choice', array(
        'choices' => array(
          'male' => 'Male',
          'female' => 'Female'
        ),
        'multiple' => false,
        'expanded' => true,
        'required' => true,
    ))
    ->getForm();

答案 3 :(得分:0)

对于那些仍在寻找解决方案的人。我只需设置$gender变量的默认值即可解决此问题:

class User {
   ...

   /**
    * @var string
    *
    * @ORM\Column(name="gender", type="string", length=6)
    * @Assert\Choice(choices = {"male","female"}, multiple = false, message = "You must choose a valid gender.")
    */
   protected gender = "male";

   ...
}