SonataAdmin 使用布尔字段创建实体

SonataAdmin create entity with boolean field

我有这个实体,如果我创建这样的记录。

$synopsis = new Synopsis();
$synopsis->setPartOne("a");
$synopsis->setPartTwo("b");
$synopsis->setTitle("A");
$synopsis->setSubtitle("B");
$synopsis->setEnabled(false);

$em->persist($synopsis);
$em->flush();

然后我转到我的管理员,我看到 "no" 的启用字段是预期的。

但是现在,如果我使用 sonata admin 新表单字段,即使我选择启用 "no",也会使用 enabled = true 创建记录。我真的不明白为什么会这样。

这是我的 SynopsisAdmin 中的内容

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper->add('title', TextType::class);
    $formMapper->add('subtitle', TextType::class);
    $formMapper->add('partOne', TextAreaType::class);
    $formMapper->add('partTwo', TextAreaType::class);
    $formMapper->add('enabled', BooleanType::class);
}

这是启用字段在实体中的定义方式

/**
 * @ORM\Column(type="boolean")
 */
private $enabled;

感谢您的帮助。

编辑:还有有趣的事实,即使我在奏鸣曲视图列表中看到“否”,但当我转到表单视图时,我看到的却是“是”。

我怀疑奏鸣曲核心功能有问题。

我认为您应该为表单字段使用 CheckboxType 而不是 BooleanType

看起来 BooleanType 是列表、显示和网格操作的补充。 https://symfony.com/doc/master/bundles/SonataAdminBundle/reference/field_types.html

更新

要使用 BooleanType,您必须将 'transform' 选项设置为 true。 这会将您的布尔值转换为 BooleanType 中的 YES/NO 选项:

$formMapper
    ->add('enabled', BooleanType::class, [
           'transform' => true
    ])