0

在尝试将服务注入我的侦听器时,我似乎错过了一个我无法识别的步骤。

这是我的 services.xmlL

<services>
    <!-- Activity logger -->
    <service id="myapp.activity_logger" class="My\AppBundle\Api\ActivityLogger">
    </service>
    <!-- Activity events -->
    <service id="myapp.activity.logged_in" class="My\AppBundle\Listener\ActivityListener">
        <argument type="service" id="myapp.activity_logger" />
        <tag name="kernel.event_listener" event="security.interactive_login" method="onLoggedIn" priority="254" />
    </service>
    ...

侦听器类本身:

namespace My\AppBundle\Listener;

use My\AppBundle\Api\ActivityLogger;

use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;

class ActivityListener
{
    protected $activityLogger;

    public function __construct(ActivityLogger $al)
    {
        $this->activityLogger = $al;
    }

    public function onLoggedIn(InteractiveLoginEvent $event)
    {
        // Log activity data

    }

触发事件时收到的错误:

ErrorException: Catchable Fatal Error: Argument 1 passed to 
My\AppBundle\Listener\ActivityListener::__construct() must be an instance of 
My\AppBundle\Api\ActivityLogger, none given, called in 
/var/www/app/cache/dev/appDevDebugProjectContainer.php on line 2739 and defined in 
/var/www/src/My/AppBundle/Listener/ActivityListener.php line 18

我似乎无法确定我在注入服务时做错了什么,因为我相信我正在遵循手册中的正确步骤。

4

1 回答 1

0

看起来你只是没有重置缓存。我想流程如下:

  1. 您创建了ActivityListener没有构造函数的类
  2. 在配置中描述服务而不注入记录器服务
  3. 刷新缓存
  4. 在配置中添加构造函数并注入 Logger 服务,但忘记刷新缓存
于 2012-12-17T05:13:48.820 回答