2012-12-17 89 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

嗯..沒有,儘管你的理論可能是正確的我仍然得到同樣的錯誤後清除緩存並嘗試加載 –