Symfony2:从 Class 字段设置复选框标签

Symfony2: Set label of checkbox from Class Field

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

$id, $name, $isChecked

我有一个表单类型,我想要 $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
        ))
    ;
}

例如,我的 Class 的 $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" 字应该是我的 Class 的 $name 变量。或者如何将整个 Class 作为 Twig/Form 中的复选框?我只想,我可以检查我的复选框,我知道,好的 "isChecked" 是真的,然后我与我的 ID 和我的名字有关系。但是用户需要知道,哪个复选框是哪个值,所以我需要 "name" 作为标签

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,
        ));
    });
}

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