Symfony2 Forms中的<select> </select>

时间:2013-04-23 13:45:59

标签: php forms symfony symfony-forms

我有两张桌子,

user
-------------------
id | name | city_id
-------------------
1  | abc  | 1
2  | xyz  | 3
3  | hkj  | 3
-------------------

city
---------
id | name
---------
1  | BN
2  | KR
3  | OP
4  | HD

我正在使用Symfony2表单创建表单。我想知道如何列出所有城市作为<option>表单元素的<select>,以便为用户xyz生成以下标记。

<select>
  <option>BN</option>
  <option>KR</option>
  <option selected='selected'>OP</option>
  <option>HD</option>
</select>

我的控制器中有这样的代码,

$user = // object of user entity

$form = $this->createFormBuilder($user)
     ->add('name', 'text')
     ->add('city', ...)  // What do I put in here so that I generate the markup as specified above
     ->getForm();

3 个答案:

答案 0 :(得分:1)

你可以看一下:http://symfony.com/doc/2.0/reference/forms/types/entity.html 编写类似的代码:

 ->add('city', 'entity', 
          array('required'   => true,
                'label'      => 'label',
                'class'    => 'YourBundle:TheClass',
                'query_builder' => function(YourClassRepository $er) {
                       return $er->createQueryBuilder('e')->orderBy('e.name', 'ASC');
                }
 ))

答案 1 :(得分:1)

您只需指定“属性”字段即可。

->add('city', 'entity', 
         array('required'   => true,
               'label'      => 'label',
               'class'      => 'YourBundle:TheClass',
               'property'   => 'name'
))

如果您希望查询构建器仅限制某些选项,则应用Sandeepraju的答案。

了解详情:http://symfony.com/doc/current/reference/forms/types/entity.html#property

答案 2 :(得分:1)

如果城市是一个实体,那么它可以很简单 - &gt;添加('城市')。如果您想要一个默认值,您可以在$ options中提供实体,例如'data'=&gt; $ defaultEntity。您的城市实体也必须具有__toString方法。 但是,如果您在城市没有实体,则可以使用类似的

$builder->add('gender', 'choice', array(
    'choices'   => array('m' => 'Male', 'f' => 'Female'),
    'required'  => false,
));
  

此字段可能会呈现为多个不同HTML字段之一,具体取决于展开的和多个选项:

     
      
  • 元素类型 - (扩展/多重)
  •   
  • 选择标签 - (假/假)
  •   
  • 选择标签multiple-(false / true)
  •   
  • 单选按钮 - (真/假)
  •   
  • checkboxes-(真/真)
  •