【问题标题】:Symfony2: Set label of checkbox from Class FieldSymfony2:从类字段中设置复选框的标签
【发布时间】:2016-01-29 17:25:13
【问题描述】:

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

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

例如,我的班级 $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',
        ))
    ;
}

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

【问题讨论】:

  • 我对第一部分有点困惑,你说id 字段是name 字段的标签...你是说is_checked 字段的标签吗?您希望它与name 的标签相同,还是要将其设置为name 的当前值?
  • 也许你想要这样的东西? :stackoverflow.com/questions/32458489/…
  • 我编辑了我的问题,请看一下。

标签: symfony checkbox formbuilder


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    相关资源
    最近更新 更多