【问题标题】:Symfony2 Default Select Radio ButtonSymfony2 默认选择单选按钮
【发布时间】:2013-03-01 13:45:28
【问题描述】:

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

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

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

有人可以帮忙吗? 请问?

【问题讨论】:

  • 我使用例如男性“数据”=>“1”,就在“选择”的上方。这就是你想要的吗?或者询问 id 并将其设置为 'data' = $id。
  • 你是不是错过了“选择”之前的开场白?

标签: forms symfony radio-button default selected


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在我看来,具有值“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();
      

      【讨论】:

        【解决方案4】:

        对于那些仍在寻找解决方案的人。我可以简单地为$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";
        
           ...
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-13
          • 2021-11-12
          • 2013-07-20
          • 1970-01-01
          • 1970-01-01
          • 2021-10-07
          相关资源
          最近更新 更多