在Symfony 2的单个表中添加来自2个不同实体的选项列表(下拉列表)

时间:2016-06-23 06:22:59

标签: forms symfony

我正在寻找一种方法,可以在symfony 2中为我的表单创建一个下拉列表,其中包含表Params中单个记录的字段'abbr1'和'abbr2'的值。

让我说我的桌子上有一条记录Params。

id:1

标题:样本

abbr1:qw12

abbr2:er34

现在我想选择abbr1和abbr2作为单个下拉列表的值。我创建了一个表单,但我不知道如何使它们成为一个选择。我一次只能选择一个属性。这是我的代码:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add(
            'desiredAbbr', 
            'entity', 
            array(
                'class' => 'FooBarBundle:Params',
                'property' => 'abbr1',
                //'property' => 'abbr2',
                )
            )
        ->add('save','submit',array('label'=>'Submit'))
    ;
}

任何建议都非常感谢。非常感谢。

更新: 预期的下拉值在html格式中如下所示:

{% for par in parameters %}
    <select>
        <option>{{param.abbr1}}</option>  {# qw12 #}
        <option>{{param.abbr2}}</option>  {# er34 #}
    </select>
{% endfor %}

1 个答案:

答案 0 :(得分:2)

好吧,我错过了你想要它们作为价值而不是标签。然后你应该像这样改变你的形式

$choices = $options['abbrChoices'];

$builder->add('desiredAbbr', ChoiceType::class, array(
    'choices' => $choices,
));

// in configureOptions method
$resolver->setDefaults(array(
    'abbrChoices' => array(),
));

在您创建表单的控制器中

$params = $this->getDoctrine()->getRepository('AppBundle:Params')->findAll();
$choices = array();
foreach ($params as $p) {
    // key will be used as option value, value as option title
    $choices[$p->getAbbr1()] = $p->getAbbr1();
    $choices[$p->getAbbr2()] = $p->getAbbr2();
}

$form = $this->createForm(myform::class, array(), array('abbrChoices' => $choices));

BUT。你打算如何使用这个选择?