Symfony 6.4, SonataAdminBundle 4.29 Sonata用户包 5.10 PHP 8.3.2
我尝试用谷歌搜索这个,我检查了Sonata User Bundle文档(没有这方面的文档),到目前为止我还没有找到解决方案。
任何人都可以帮忙吗?如果可能的话,请提供一个简单、有效的示例,说明 SonataUserBundle 5.10 版本中扩展的 SonataUserBundle UserAdmin 类?
我在使用最新(2024 年 2 月)版本的 Sonata admin Bundle 4.29 + Sonata User Bundle 5.10 扩展 SonataUserBundle UserAdmin 类时遇到问题。
我正在尝试扩展默认包的 UserAdmin 类。让我自己的自定义 UserAdmin 类扩展 Sonata\UserBundle\Admin\Model\UserAdmin 会在不正确的 __construct() 参数上引发异常。看来我的服务 + __construct + 参数与默认(基本管理)UserAdmin 类 __construct() 和 1 个参数发生冲突。我找不到让它发挥作用的方法。
这是我的设置的详细信息。如果还有什么需要提供的,请告诉我。任何帮助将不胜感激。
这是我的自定义用户管理代码:
use Sonata\UserBundle\Admin\Model\UserAdmin as BaseAdmin;
use Doctrine\ORM\EntityManager;
use Sonata\UserBundle\Model\UserManagerInterface;
//...
class UserAdmin extends BaseAdmin
{
protected $tokenStorage;
protected $container;
public EntityManager $doctrine;
public function __construct(UserManagerInterface $userManager, TokenStorageInterface $securityToken, EntityManager $em)
{
$this->tokenStorage = $securityToken;
$this->doctrine = $em;
parent::__construct($userManager);
}
//...
这是我的服务:
app.admin.user:
class: App\Admin\UserAdmin
arguments: ["@sonata.user.manager.user", "@security.token_storage", "@doctrine.orm.entity_manager"]
tags:
- { name: sonata.admin, model_class: App\Entity\User, manager_type: orm, group: sonata_user, label: User, pager_type: "simple" }
public: true```
I've also tried to use set methods in my service but that causes security token = null when I try to access token:
calls:
- [ setSecurityToken, ["@security.token_storage"] ]
- [ setEntityManager, ["@doctrine.orm.entity_manager"] ]
- [ setContainer, ["@service_container"] ]```
这也没有按预期工作,因为当我尝试访问安全令牌存储时:
protected function configureQuery(ProxyQueryInterface $query): ProxyQueryInterface
{
$rootAlias = current($query->getRootAliases());
dump($this->tokenStorage);exit; // <-- null
$user = $this->tokenStorage->getToken()->getUser();
$query->andWhere(
$query->expr()->eq($query->getRootAliases()[0] . '.organisation', ':id')
);
$query->setParameter('id', $user->getOrganisation());
return $query;
}
安全令牌存储为空,这意味着我无法正确查询。
这是我的 sonata.user.yaml 配置:
sonata_user:
security_acl: false
manager_type: orm # can be orm or mongodb
#impersonating_route: sonata_user_impersonating
impersonating:
route: sonata_admin_dashboard
class: # Entity Classes
user: App\Entity\User #App\Entity\SonataUserUser
#taken out sf6.4 group: App\Entity\Group
resetting:
email:
address: sonata@localhost
sender_name: Sonata Admin
admin: # Admin Classes
user:
class: App\Admin\UserAdmin
#class: Sonata\UserBundle\Admin\Entity\UserAdmin
controller: '%sonata.admin.configuration.default_controller%'
translation: SonataUserBundle
如果有人能提供帮助那就太好了。
我尝试在官方文档版本 5.x 的官方文档中寻找答案,但不存在任何信息。
我尝试在sonata用户包github上提出支持票sonata用户包github但在我看来这个包已经死了或被遗弃了。
我尝试过堆栈溢出,但在最新的奏鸣曲用户包中找不到任何内容。
我想我找到了一个解决方案,可以让我扩展 SonataUserAdmin。
我从此更改了服务:
app.admin.user:
class: App\Admin\UserAdmin
arguments: ["@sonata.user.manager.user", "@security.token_storage", "@doctrine.orm.entity_manager"]
tags:
- { name: sonata.admin, model_class: App\Entity\User, manager_type: orm, group: sonata_user, label: User, pager_type: "simple" }
public: true
对此:
sonata.user.admin.user:
class: App\Admin\UserAdmin
arguments: ["@sonata.user.manager.user", "@security.token_storage", "@doctrine.orm.entity_manager"]
tags:
- { name: sonata.admin, model_class: App\Entity\User, manager_type: orm, group: sonata_user, label: User, pager_type: "simple" }
public: true
将
app.admin.user
更改为“sonata.user.admin.user”。这允许我加载扩展的 UserAdmin 类。这只是一种解决方法,还是应该如此?如果有人可以解释,请提供一些见解。我发现这可以解决加载扩展 UserAdmin 类的问题,并且似乎至少加载了包含自定义表单字段的页面,这是成功的。