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,
));
});
}
另一种方法是将实体数据传递给您的模板并在那里手动设置标签,但上述解决方案是更传统的方法。
我有一个包含 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,
));
});
}
另一种方法是将实体数据传递给您的模板并在那里手动设置标签,但上述解决方案是更传统的方法。