我有一个正确渲染的复选框。如果数据库中没有数据,我希望默认情况下选中复选框。
如果我设置"data" = True
,则会显示已选中的复选框。现在,如果我从数据库中获取数据,它将不会覆盖布尔值false的复选框。如果我删除数据“=> true,那么我可以从数据库中获取正确的复选框,但我无法设置默认复选框。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('isFieldFirstname', 'checkbox', array(
'label' => 'Show First Name',
'required' => false,
"data" => true,
)
)
回顾一下
答案 0 :(得分:1)
您实现了buildForm
方法来描述表单的结构,而不是值。值来自普通数组或数据对象。 Symfony使用DataAccess组件映射它们。
// MyFormType.php
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add(
'fieldFirstname',
'checkbox',
[
'label' => 'Show First Name',
'required' => false
]
);
}
// MyFormData.php
class MyFormData {
private $fieldFirstname;
public function isFieldFirstname() {
return $this->fieldFirstname;
}
public function setFieldFirstname($fieldFirstname) {
$this->fieldFirstname = $fieldFirstname;
}
}
// MyController.php
// ...
public function myAction() {
$data = new MyFormData();
$data->setFieldFirstname(
! $myService->isDataInDatabase()
);
$form = $this->createForm(
new MyFormType(),
$data
);
// ...
}
现在没有测试,但应该有效。