我有一个包含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和我的名字有关系。但是用户需要知道哪个复选框是哪个值,所以我需要“名称”作为标签
答案 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,
));
});
}
另一种方法是将实体数据传递给模板并在那里手动设置标签,但上述解决方案是更传统的方式。