1

我知道网络上的各个论坛上已经有很多关于这个主题的帖子。然而,没有一个解决方案实际上对我有用,尽管这个问题看起来很简单。

我想在我的 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;

   ...
}

(getter 和 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

4 回答 4

3

如果您想在表单中预选按钮,请尝试使用“数据”属性和选择数组中的所需键,例如:

->add('gender', 'choice', array(
        'choices' => array(
          'male' => 'Male',
          'female' => 'Female'
        ),
        'multiple' => false,
        'expanded' => true,
        'required' => true,
        'data'     => 'male'
    ))
于 2016-03-24T10:02:31.697 回答
1

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

于 2013-03-13T14:46:47.277 回答
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();
于 2014-02-05T15:42:53.060 回答
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";

   ...
}
于 2018-03-15T13:58:45.537 回答