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 に答える