动态选择Symfony2中的FormType

时间:2012-06-17 21:36:33

标签: symfony symfony-forms

我的index.twig中有一个动态选择标记。选择的代码是

 <select name="portfolio" style="width: 265px; height:28px;">
   <option selected="selected" value="default">Switch Your Portfolio</option>
   {% for portfolio in portfolios %}
      <option value={{ portfolio.id }}>{{ portfolio.portfolioName }}</option>
   {% endfor %}
 </select>

现在我有SwitchPortfolioType,我想在我的Type

中创建这个动态选择
class SwitchPortfolioType extends AbstractType
{
   public function buildForm(FormBuilder $builder, array $options)
   {
    $builder
    ->add('availability', 'choice', array(
        'choices'   => array(
            //dynamic options here
     ),
            'empty_value' => 'Switch your Portfolio',
    ));
   }
}

我如何在Symfony2

中执行此操作

3 个答案:

答案 0 :(得分:3)

我已经以这种方式在我们的项目中实现了代码......

class SwitchPortfolioType extends AbstractType
{
   public function buildForm(FormBuilder $builder, array $options)
   {

       $builder
            ->add('name')
            ->add('description')
            ->add('parentid', 'entity', array('class'=>'MusicCoreBundle:MusicCategory',
                'property'  => 'name',
                'required'  => false,
                'query_builder' => function(EntityRepository $er) {return $er->createQueryBuilder('s')->orderBy('s.name', 'ASC');},
                'empty_value' => 'No category'));

   }
}

答案 1 :(得分:1)

创建一个构造函数,该构造函数将数组作为SwitchPortfolioType类的参数:

public function __construct($myArray)
{
    $this->myArray = $myArray;
}

并且,在您的控制器中,在创建表单对象时将其传递给动态数组:

$form = $this->createForm(new SwitchPortfolioType($myArray), $entity);

现在,您可以使用$this->myArray在表单类型中使用数组。

答案 2 :(得分:0)

请参阅本文档页面,您可以使用表单构建器区域中的FormEvents::PRE_SET_DATA设置动态数据。

http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#how-to-dynamically-generate-forms-based-on-user-data