php - easy admin 3 过滤器关联字段
问题描述
我正在努力寻找在编辑视图中过滤关联字段列表的解决方案。
情况:
User
有allowedSuppliers
ManyToMany 到Supplier
Website
有enabledSuppliers
ManyToMany 到Supplier
根据用户角色,我只想显示其中Supplier
的User
一部分allowedSuppliers
是否可以过滤这些以便用户看不到不允许的选项enabledSuppliers
关联字段?
解决方案
这可以通过在 configureFields 中的字段上通过 setFormTypeOptions 更改选择来完成。我在下面放了一个例子来检查用户角色是否不是ROLE_ADMIN
如果不是它只会显示允许的选择,这似乎就像我想要的那样工作。
由于文档中没有明确解释这一点,因此进行了一些猜测和挖掘。
public function configureFields(string $pageName): iterable
{
$fields = [];
if (array_search('ROLE_ADMIN', $this->getUser()->getRoles()) === false) {
/** @var User|null $user */
$user = $this->entityManager->getRepository(User::class)->findOneBy([
'username' => $this->getUser()->getUsername()
]);
if ($user) {
$fields[] = AssociationField::new('suppliers')->onlyOnForms()->setFormTypeOptions([
"choices" => $user->getEnabledSuppliers()->toArray()
]);
}
} else {
$fields[] = AssociationField::new('suppliers')->onlyOnForms();
}
return $fields;
}
推荐阅读
- c - 使用鼠标在 ncurses 中绘制一行字符
- php - PHP get 缺少参数?
- python - 根据条件熊猫python在数据框中删除行
- c++ - 是否允许使用类类型的 std::function 成员变量(不完整类型)?
- reactjs - 如何在firebase托管上存储xml文件获取指向它的url?
- typescript - TypeScript 根据参数数量创建类型
- sql - 不同组的 Oracle SQL 领先滞后
- amazon-web-services - 在 Terraform 中获取多个 ec2 实例(标签名称和私有 ip)的输出
- java - 如何模拟抽象类的私有方法
- node.js - 如何将服务器的响应发布到对话流?