当前位置: 首页 > 知识库问答 >
问题:

Symfony 3.4服务-条令\ORM\EntityManager的实例,给定布尔值

梁磊
2023-03-14

自从我从3.0更新到Symfony 3.4后,我当前有一个服务错误。

我有一个SwitchUserListener,它在其构造中接收几个对象,但它无法接收实体管理器,即使我有它的类型提示。我还为我的服务添加了一个公钥

我得到了一个FatalThrowableError,因为类用布尔值而不是EntityManager对象实例化。

错误消息

类型错误:传递给Dbm\UserBundle\Security\SwitchUserListener::__construct()的参数10必须是Doctrine\ORM\EntityManager的实例,给出布尔值,在第8行的C:\wamp64\www\Porail\var\ache\dev\ContainerWyiblvw\getSecurity_Authentication_SwitchuserListener_MainService.php中调用

fatalthrowable错误线

SwitchUserListener-

这是我现在拥有的。

服务.yml

services:
    _defaults:
        public: true
        autowire: true
        autoconfigure: true

    security.authentication.switchuser_listener:
        class: Dbm\UserBundle\Security\SwitchUserListener
        arguments:
            - '@security.token_storage'
            - ~
            - '@security.user_checker'
            - ~
            - '@security.access.decision_manager'
            - '@logger'
            - ''
            - ''
            - '@event_dispatcher'
            - '@doctrine.orm.entity_manager'
            - '@security.authorization_checker'
        tags:
            - { name: monolog.logger, channel: security }

SwitchUserListener.php

namespace Dbm\UserBundle\Security;
...
use Doctrine\ORM\EntityManager;

class SwitchUserListener implements ListenerInterface
{
    private $tokenStorage;
    private $provider;
    private $userChecker;
    private $providerKey;
    private $accessDecisionManager;
    private $usernameParameter;
    private $role;
    private $logger;
    private $dispatcher;
    private $em;
    private $authCheck;

    public function __construct(TokenStorageInterface $tokenStorage,
                                UserProviderInterface $provider,
                                UserCheckerInterface $userChecker,
                                $providerKey,
                                AccessDecisionManagerInterface $accessDecisionManager,
                                LoggerInterface $logger = null,
                                $usernameParameter = '_switch_user',
                                $role = 'ROLE_ALLOWED_TO_SWITCH',
                                EventDispatcherInterface $dispatcher = null,
                                EntityManager $em,
                                AuthorizationChecker $authCheck)
    {
        ...
    }

共有1个答案

杭胜
2023-03-14

编辑

终于发现了我的错误。我用自己的服务覆盖了Symfony\Bundle\SecurityBundle\Resources\config\securityListeners.xml的switchuser_listener,我想他们列表中的最后一个参数(第10个呵呵...呵呵...)在我更新之前不存在,迫使我拥有它我services.yml档案里也有

security_listeners.xml

    <service id="security.authentication.switchuser_listener" class="Symfony\Component\Security\Http\Firewall\SwitchUserListener" abstract="true">
        <tag name="monolog.logger" channel="security" />
        <argument type="service" id="security.token_storage" />
        <argument /> <!-- User Provider -->
        <argument /> <!-- User Checker -->
        <argument /> <!--  Provider Key -->
        <argument type="service" id="security.access.decision_manager" />
        <argument type="service" id="logger" on-invalid="null" />
        <argument>_switch_user</argument>
        <argument>ROLE_ALLOWED_TO_SWITCH</argument>
        <argument type="service" id="event_dispatcher" on-invalid="null"/>
        <argument>false</argument> <!-- Stateless -->
    </service>

下面的文本仍然有效,这是对这个问题的正确答案。但原因就在这里。

编辑结束

我以某种方式能够通过设置autowire为false来解决这个奇怪的问题,我还添加了一个额外的参数,其中false是(第10个参数)。

只有这样,我才能“跳过”这个问题。这样做有点脏。但它是有效的。

dependencyInjection发送的参数不正确。(至少,我是这么想的)

这是一个解决方法,我不会将其标记为已回答,因此如果有人找到此问题的实际答案,我会将其标记为正确答案

这里是变化

我只是在第10个位置添加了一个额外的空参数

services:
    _defaults:
        public: true
        autowire: true
        autoconfigure: true

    security.authentication.switchuser_listener:
        class: Dbm\UserBundle\Security\SwitchUserListener
        autowire: false
        arguments: 
            - '@security.token_storage'
            - ~
            - '@security.user_checker'
            - ''
            - '@security.access.decision_manager'
            - '@logger'
            - ''
            - ''
            - '@event_dispatcher'
            - ''  
            - '@doctrine.orm.entity_manager'
            - '@security.authorization_checker'
        tags:
            - { name: monolog.logger, channel: security }

SwitchUserListener.php我只是在第10个位置添加了一个额外的参数

public function __construct(TokenStorageInterface $tokenStorage,
                            UserProviderInterface $provider,
                            UserCheckerInterface $userChecker,
                            $providerKey,
                            AccessDecisionManagerInterface $accessDecisionManager,
                            LoggerInterface $logger = null,
                            $usernameParameter = '_switch_user',
                            $role = 'ROLE_ALLOWED_TO_SWITCH',
                            EventDispatcherInterface $dispatcher = null,
                            $buggyParam, //Not doing anything with this
                            EntityManagerInterface $em,
                            AuthorizationChecker $authCheck)
{
 类似资料:
  • sqlacalchemy发行版包含各种代码示例,说明了一组选定的模式,有些是典型的,有些则不那么典型。所有这些都是可运行的,可以在 /examples 分发目录。所有的描述和源代码都可以在这里找到。 一些用户贡献的其他SQLAlChemy示例可以在wiki上找到,网址是 https://www.sqlalchemy.org/trac/wiki/UsageRecipes 。 作图食谱 邻接表 使用邻

  • 问题内容: 我对PHP和MySQL还是很陌生,但是我无法弄清楚这一点。我在论坛周围搜索了所有内容,但没有找到我能理解的答案。我最初使用的是mysql_fetch_assoc(),但我只能搜索数字,并且在搜索字母时也收到错误。我希望我在正确的轨道上。预先感谢您的所有帮助! 问题答案: 当您的结果不是结果(而是“ false”)时,就会发生这种情况。您应该更改此行 对此: 因为“可以解释$变量,而’不

  • 但由于微服务设计的原因,它们都在不同的包或服务中。我是否应该创建另一个项目作为一个共享库,包括它内部的所有实体,然后包括在每个微服务中?你有别的解决办法吗,还是这是一个解决办法?

  • 问题内容: 我已经创建了自己的服务,并且需要注入原则EntityManager,但是我没有看到在我的服务上被调用,并且注入不起作用。 这是代码和配置: 这是我的包 我已经将.yml导入了我的应用中 当我在控制器中致电服务时 我得到一个对象(不为null),但是在UserService中为null,正如我已经提到的,从未调用过UserService上的构造函数 还有一件事,Controller和Us

  • 我已经创建了自己的服务,需要注入doctrine EntityManager,但我看不到在我的服务上调用了,注入也不起作用。 以下是代码和配置: 这是我的包中的 我已经导入了. yml在在我的应用程序中 当我在控制器中调用服务时 我得到一个对象(不是null),但是

  • 下面是我的spring配置文件[springbeans.xml] 我的StudentDAOImpl类将实现StudentDAO接口,它将具有如下方法 最后主类