Symfony 5 / Easyadmin 3 - FormBuilder 添加的字段未显示适当的输入

Posted

技术标签:

【中文标题】Symfony 5 / Easyadmin 3 - FormBuilder 添加的字段未显示适当的输入【英文标题】:Symfony 5 / Easy Admin 3 - FormBuilder added field not displaying appropiate input 【发布时间】:2021-10-14 19:33:34 【问题描述】:

我正在使用 Easy Admin 的 FormBuilder 构建一个表单。我的目标是拥有一个代表OneToMany 关系的AssociationField,例如,将多个产品分配给一个商店。另外,我只想列出一些过滤后的产品,所以我覆盖了CrudController中的createEditFormBuilder方法,我使用this question作为参考,这是覆盖函数的代码:

    public function createEditFormBuilder(EntityDto $entityDto, KeyValueStore $formOptions, AdminContext $context): FormBuilderInterface
    
        $formBuilder = parent::createEditFormBuilder($entityDto, $formOptions, $context);

        $filteredProducts = $context->getEntity()->getInstance()->getFilteredProducts();

        $formBuilder->add('products', EntityType::class, ['class' => 'App\Entity\Product', 'choices' => $filteredProducts, 'multiple' => true]);

        return $formBuilder;
    

我希望关联字段与 configureFields() 函数中配置的字段相同,但是显示的字段不允许文本搜索或自动完成功能,而且高度不正确。

预期:

实际:

我尝试更改 $formBuilder->Add() 函数中的第二个参数,但所有特定的 EasyAdmin 类型都抛出错误。

更新:我也尝试使用 EasyAdmin 的 CrudFormType 而不是 EntityType,它不支持 'choice' 参数。结果还是一样。

【问题讨论】:

【参考方案1】:

字段上有setQueryBuilder,你可以用它来过滤这样的实体

<?php

// ...
public function configureFields(string $pageName): iterable

  // ...
  yield new AssociationField::new('products')->setQueryBuilder(function($queryBuilder) 
      $queryBuilder
        ->andWhere('entity.id IN (1,2,3)')
      ;
  )
  ;
  // ...

【讨论】:

以上是关于Symfony 5 / Easyadmin 3 - FormBuilder 添加的字段未显示适当的输入的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 5 easyadmin 3 与 ManyToOne 关系的实体 - 不保存在“多”端

在 Symfony 5 中使用 composer 安装 EasyAdmin 的问题

EasyAdmin 3.1 CrudControllers Symfony

如何在 Symfony EasyAdmin 3 中创建密码输入类型

Symfony 5 - Easy Admin 3:关联实体有这么多数据时,AssociationField 的负载很重

无法确定类“App\Entity\XXXX”中属性“image”的访问类型。 Symfony 4 - EasyAdmin 3.2 - VichUploader