1

我对选择和表单类型有疑问。我的问题的简短描述:

我有带有选项的表单类型

->add('fieldName2', 'choice', array(
        'label' => 'Some label',
        'choices' => array(
            0 => 'Option 1',
            1 => 'Option 2',
            ...,
            n => 'Option n'
        ),
    ))

在数据库中,该字段是 int (必须是数字)。现在问题来了:我想列出该表的所有记录。结果是这样的:

fieldName1|fieldName2
----------|----------
somevalue | 0
somevalue | 1
somevalue | 2

但我不会看起来像这样:

fieldName1|fieldName2
----------|----------
somevalue | Option 1
somevalue | Option 2
somevalue | Option 3

如何在模板中结合表单类型字段选择和实际值。我必须为此创建自定义树枝功能还是有内置解决方案?

4

1 回答 1

2

假设$data在控制器中包含来自数据库的字段,请创建“选择”数组:

$choices = array();
foreach ($data as $elem)
{
  $choices[$elem] = "Option {$elem}";
}

然后,创建您的表单并在构造函数中传递您的选择数组。

$form = $this->createForm(new YourFormType($choices), new YourFormData());

在您的表单中,添加一个构造函数:

private $choices;

// (...)

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

最后,使用您之前准备的一系列选项创建您的字段。

(...)
->add('fieldName2', 'choice', array(
        'label' => 'Some label',
        'choices' => $this->choices,
))

注意:将属性名称“choices”替换为不易混淆的名称;如果您有几个看起来像这样的选择,将会更容易阅读。

于 2013-10-20T14:07:18.127 回答