将服务注入监听器类

时间:2012-12-17 04:43:08

标签: php symfony

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

这是我的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

我似乎无法隔离我在注入服务方面做错的事情,因为我相信我已按照手册中的正确步骤进行操作。

1 个答案:

答案 0 :(得分:0)

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

  1. 您创建了没有构造函数的ActivityListener
  2. 在不注入记录器服务的情况下在配置中描述服务
  3. 刷新缓存
  4. 在config中添加了构造函数并注入了Logger服务,但忘记了刷新缓存