Silex子表单集合

时间:2012-12-09 14:02:12

标签: symfony twig silex

我正在使用Silex并尝试使用一组属于某个组的字段构建表单。

可以使用与以下代码类似的内容吗? (我的例子目前不会产生任何错误,但在Twig中没有列出任何内容。)

在我的路线中:

$builder = $app['form.factory']->createBuilder('form');

$tags[] = array('label' => 'Tag A', 'data' => 1);
$tags[] = array('label' => 'Tag B', 'data' => 2);

foreach($tags as $key => $tag) {
  $builder->add('tags', 'collection', array(
    'type'   => 'text',
    'allow_add' => true,
    'allow_delete' => true,
    'options'  => array(
      'label' => $tag['label'],
      'constraints' => array(new Assert\NotBlank()),
      'data' => $tag['data']
    ),
  ));
}

$form = $builder->getForm();

在Twig中:

<ul class="tags">
  {% for tag in form.tags %}
    <li>{{ form_row(tag) }}</li>
  {% endfor %}
</ul>

1 个答案:

答案 0 :(得分:0)

我没有使用Silex一段时间,但原则应该和Symfony一样。

你不应该像这样循环创建集合。您基本上是为每个标签创建多个集合。相反,您需要所有标签的单个集合。我没有对此进行测试,但这些方面的内容应该有效...

// form variables ...
$tags[] = array('label' => 'Tag A', 'data' => 1);
$tags[] = array('label' => 'Tag B', 'data' => 2);
$data = array( 'tags' => $tags );

$builder = $app['form.factory']->createBuilder('form', $data);
$builder->add('tags', 'collection', array(
    'type'   => 'text',
    'allow_add' => true,
    'allow_delete' => true,
    'options'  => array(
        'constraints' => array(new Assert\NotBlank()),
    ),
));