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

时间:2015-04-24 20:08:15

标签: php symfony checkbox

我有一个正确渲染的复选框。如果数据库中没有数据,我希望默认情况下选中复选框。

如果我设置"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. 如果记录发现使用数据库中的使用值,则取消选中isFieldFirstname = false复选框

1 个答案:

答案 0 :(得分:1)

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

  • 在您的复选框中删除“数据”选项
  • 调用您的复选框“fieldFirstname”(不是“是”)

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

  // ... 
}

现在没有测试,但应该有效。