首页 > 解决方案 > SonataAdmin 使用布尔字段创建实体

问题描述

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

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

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

然后我转到我的管理员,我看到启用的字段为“否”,这是预期的。

但是现在,如果我使用奏鸣曲管理新表单字段,即使我选择启用“否”,也会使用启用 = 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;

谢谢你的帮助。

编辑:有趣的事实,即使我在奏鸣曲视图列表中没有看到,当我进入表单视图时,我看到的是。

我怀疑奏鸣曲核心功能存在错误。

标签: symfonysymfony4sonata-admin

解决方案


我认为您应该使用 theCheckboxType而不是BooleanTypeForm 字段。

看起来像是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
    ])

推荐阅读