Symfony2:从类字段中设置复选框的标签

时间:2016-01-29 08:07:26

标签: symfony checkbox formbuilder

我有一个包含3个字段的类:

$id, $name, $isChecked

我有一个formtype,我希望$ id字段的标签是$ name字段。这可能吗?

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('id')
        ->add('name')
        ->add('is_checked', 'checkbox', array(
            'required' => false,
            'label' => //This should be the $name field
        ))
    ;
}

例如,我的班级为$ id = 1,$ name =“Car”。 然后我想这样:

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('id')
        ->add('name')
        ->add('is_checked', 'checkbox', array(
            'required' => false,
            'label' => 'Car',
        ))
    ;
}

- > “Car”字应该是我班级的$name变量。或者如何在Twig/Form中将整个班级作为复选框?我只想要,我可以检查我的Checkbox而不是我知道,ok "isChecked"是真的,然后我与我的ID和我的名字有关系。但是用户需要知道哪个复选框是哪个值,所以我需要“名称”作为标签

1 个答案:

答案 0 :(得分:4)

Symfony中有关于如何执行此操作的良好文档 - 您要做的是modify the form based on the underlying data。您要做的是在PRE_SET_DATA上添加一个表单事件,该事件与起始数据一起使用。您的buildForm()函数现在看起来像这样:

use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('id')
        ->add('name')
    ;

    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
        $entity = $event->getData();
        $form = $event->getForm();

        // set default label if there is no data, otherwise use the name
        $label = (!$entity || null === $entity ->getId())
            ? 'Default'
            : $entity->getName()
        ;

        $form->add('is_checked', 'checkbox', array(
            'required' => false,
            'label' => $label,
        ));
    });
}

另一种方法是将实体数据传递给模板并在那里手动设置标签,但上述解决方案是更传统的方式。