2012-12-17 92 views
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 

我似乎无法以隔离我做错了注入服务,因为我相信我遵循手册中的正确步骤。

回答

0

它看起来像你刚才没有重置缓存。我想流动情况如下:

  1. 您无需注射记录器服务
  2. 冲洗,缓存
  3. 添加构造函数创建ActivityListener类没有构造
  4. 在配置描述的服务,并在注射记录器服务配置,但忘了刷新缓存
+0

嗯..没有,尽管你的理论可能是正确的我仍然得到同样的错误后清除缓存并尝试加载 –