选中 Symfony 表单 EntityType 复选框
Posted
技术标签:
【中文标题】选中 Symfony 表单 EntityType 复选框【英文标题】:Symfony form EntityType checkbox selected 【发布时间】:2021-11-02 06:04:46 【问题描述】:在呈现表单时,我们如何获取要检查的数据库中为真的复选框?
我可以使用choice_attr 设置一个复选框,但我找不到检查特定复选框是否应该被选中的方法。
public function buildForm(FormBuilderInterface $builder, array $options)
'choice_attr' => function ($UserRoles, $key, $index)
return ($key == 1) ? ['checked' => true] : ['checked' => false];
,
【问题讨论】:
如果您使用您的实体作为默认值的data_class
使用表单构建器添加字段,则无需执行任何操作即可发生这种情况。请参阅symfony.com/doc/current/forms.html#creating-form-classes 了解更多信息。
感谢@DirkJ.Faber 我正在使用 data_class 作为用户实体,但这对链接的 UserRoles 实体没有帮助。我已经制定了解决方案并将其发布在下面。
我猜你需要自定义表单主题 symfony.com/doc/current/form/form_themes.html
@MaxLipsky 我正在使用 bootstrap_5_layout.html.twig,但这是为了风格,而不是功能。我已经使用'choice_attr' => function ($roles, $key, $index) use ($UserRoles)
回答了以下问题
【参考方案1】:
所以解决方案实际上是一个简单的解决方案,我只是不知道在闭包上“使用”来注入用户拥有的角色。
public function buildForm(FormBuilderInterface $builder, array $options)
$UserRoles = $options['data']->getRoles();
...
$builder->add('roles', EntityType::class, [
'class' => \App\Entity\UserRoles::class,
'choice_label' => 'role',
'choice_attr' => function ($roles, $key, $index) use ($UserRoles)
$selected = false;
if(in_array($roles->getRole(), $UserRoles))
$selected = true;
return ['checked' => $selected];
,
// used to render a select box, check boxes or radios
'multiple' => true,
'expanded' => true,
'data' => null
])
【讨论】:
这似乎有些不对劲。如果您只是想显示用户拥有哪些角色(即实体),您可以使用:->add('roles', EntityType::class, [ 'label' => 'User roles(s)', 'class' => Roles::class, 'multiple' => true, ])
您已删除检查用户拥有的复选框的逻辑。我认为您错过了 UserRoles 实体拥有应用程序中所有可用角色的观点。我不只是想显示用户拥有哪些角色。以上工作按预期工作。以上是关于选中 Symfony 表单 EntityType 复选框的主要内容,如果未能解决你的问题,请参考以下文章
Symfony - 使用重复的 EntityType 优化表单
Symfony 表单 - EntityType 通过实体 ID 选择选项
Symfony sonata EntityType 编辑表单 - 选择 - 获取其他当前
如何使用 EntityType 字段对 Symfony 4 表单进行单元测试