将Symfony Form中的id属性设置为twig变量

时间:2014-12-20 13:02:06

标签: forms symfony twig symfony-forms

我想在表格中的表格行ID中添加一个twig变量。

{% for child in form %}               
    {{ form_widget(child, {'id':'asterisks-rating-loop.index' }) }} 
{% endfor %}

目前它没有被解析为twig变量。有没有办法在没有使用Javascript或jQuery的情况下使用此设置将id设置为&asterisks-rating - ' loop.index?

我试图逃避'它与:

{{ form_widget(child, {'id':'asterisks-rating-{{loop.index}}' }) }}
{{ form_widget(child, {'id':'asterisks-rating-'{{loop.index}}'' }) }} 

但显然这些解决方案都不起作用。

2 个答案:

答案 0 :(得分:3)

使用

{{ form_widget(child, {'id':'asterisks-rating-' ~ loop.index }) }} 

答案 1 :(得分:0)

最佳做法应该是:

    如果可以的话,
  • 添加form collection而不是多个表格(例如,如果您的表单未单独处理)。

  • 如果您的表单是单独处理的,请在类型的getName()方法中添加动态ID,例如:

BobType.php

<?php

namespace Fuz\AppBundle\Form;

use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class BobType extends AbstractType
{

    protected $suffix;

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


    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
           ->add('whatever', 'text')
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array (
                'data_class' => 'Fuz\AppBundle\Entity\BobData',
        ));
    }

    public function getName()
    {
        return 'BobType-' . $suffix;
    }

}

BobController.php

$formA = new BobType("hello"); // {{ formA.whatever.vars.id == BobType-hello-whatever }}
$formB = new BobType("world"); // {{ formB.whatever.vars.id == BobType-world-whatever }}