扩展 SonataUserBundle v.5.10 + Symfony v.6.4 + SonataAdminBundle v.4.29 时出现问题

问题描述 投票:0回答:1

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但在我看来这个包已经死了或被遗弃了。

我尝试过堆栈溢出,但在最新的奏鸣曲用户包中找不到任何内容。

sonata-admin sonata-user-bundle
1个回答
0
投票

我想我找到了一个解决方案,可以让我扩展 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 类的问题,并且似乎至少加载了包含自定义表单字段的页面,这是成功的。

© www.soinside.com 2019 - 2024. All rights reserved.