Symfony easyadmin实体字段';用户的动态自定义选择
已安装带有symfony 4的easyadminbundle,为实体名称Symfony easyadmin实体字段';用户的动态自定义选择,symfony,easyadmin,Symfony,Easyadmin,已安装带有symfony 4的easyadminbundle,为实体名称交付配置,并且它有一个与另一个实体名称WeeklyMenu关联的字段: easy_amin.yaml: Delivery: ... form: fields: - { property: 'delivered'} - { property: 'weeklyMenu', type: 'choice', type_options: { choices: null
交付配置
,并且它有一个与另一个实体名称WeeklyMenu关联的字段
:
easy_amin.yaml:
Delivery:
...
form:
fields:
- { property: 'delivered'}
- { property: 'weeklyMenu', type: 'choice', type_options: { choices: null }}
我需要一个动态筛选的weeklyMenu
实体的结果,这样我就可以得到接下来几天的菜单列表等等。它现在设置为null
,但必须在此处获得过滤结果
我已经读过关于重写我用它绊倒的
AdminController
。我认为我必须重写easyadmin的查询生成器,该生成器列出了关联实体的结果。我发现,如果有人在寻找:
namespace App\Controller;
use Doctrine\ORM\EntityRepository;
use EasyCorp\Bundle\EasyAdminBundle\Controller\EasyAdminController;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilder;
class AdminController extends EasyAdminController {
public function createDeliveryEntityFormBuilder($entity, $view) {
$formBuilder = parent::createEntityFormBuilder($entity, $view);
$fields = $formBuilder->all();
/**
* @var $fieldId string
* @var $field FormBuilder
*/
foreach ($fields as $fieldId => $field) {
if ($fieldId == 'weeklyMenu') {
$options = [
'attr' => ['size' => 1,],
'required' => true,
'multiple' => false,
'expanded' => false,
'class' => 'App\Entity\WeeklyMenu',
];
$options['query_builder'] = function (EntityRepository $er) {
$qb = $er->createQueryBuilder('e');
return $qb->where($qb->expr()->gt('e.date', ':today'))
->setParameter('today', new \DateTime("today"))
->andWhere($qb->expr()->eq('e.delivery', ':true'))
->setParameter('true', 1)
->orderBy('e.date', 'DESC');
};
$formBuilder->add($fieldId, EntityType::class, $options);
}
}
return $formBuilder;
}
}
因此easyAdmin检查是否存在具有实体名称的formbuilder,即
createFormBuilder()您可以使用自己的逻辑覆盖此处。另一种方法是创建新的FormTypeConfigurator并覆盖选项和/或标签。并将其标记为:
App\Form\Type\Configurator\UserTypeConfigurator:
tags: ['easyadmin.form.type.configurator']
配置程序如下所示: