Symfony 2 - 具有默认值的复选框,除非来自数据库的数据

Symfony 2 - Checkbox with default Value unless Data From Database

我有一个正确呈现的复选框。如果数据库中没有数据,我希望默认选中该复选框。

如果我设置 "data" = True,它会显示选中的复选框。现在,如果我从数据库中获取数据,它不会将复选框覆盖为布尔值 false。如果我删除数据" => true 那么我可以从数据库中获取正确的复选框,但我无法设置默认复选框。

    public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('isFieldFirstname', 'checkbox', array(
        'label'    => 'Show First Name',
        'required' => false,
            "data" => true,
            )
                )

简单回顾一下

  1. 数据库 - 未找到记录 - 显示已选中的默认复选框
  2. 如果记录发现使用来自数据库的值 ex isFieldFirstname = false 未选中复选框

您实施 buildForm 方法来描述表单的结构,而不是值。这些值来自普通数组或数据对象。 Symfony 使用 DataAccess 组件来映射它们。

  • 在您的复选框中删除 "data" 选项
  • 调用您的复选框 "fieldFirstname"(否 "is")

// MyFormType.php

public function buildForm(FormBuilderInterface $builder, array $options) {
  $builder
    ->add(
      'fieldFirstname',
      'checkbox',
      [
        'label'    => 'Show First Name',
        'required' => false
      ]
    );
}
  • 创建数据class

// 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
  );

  // ... 
}

现在没有测试,但应该可以。