2

Services.xml ファイル:

<?xml version="1.0" ?>

    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">  

        <services>
            <service id="task.task_history_insertion" class="Acme\Bundle\EventListener\TaskHistoryInsertion">
                <argument type="service" id="service_container" />
                <tag name="doctrine.event_listener" event="postPersist" method="postPersist"/>
            </service>
        </services>
    </container>

TaskHistoryInsertion.php

class TaskHistoryInsertion implements EventSubscriber
{

    protected $container;
public function __construct(ContainerInterface $container)
{
    $this->container = $container; 
}

public function getSubscribedEvents()
{
    return array(
        Event::postPersist
    );
}

public function postPersist(LifecycleEventArgs $args)
{
         //not being called
        }
}

永続化した後に postPersist が呼び出されない理由についてのアイデアはありますか?

4

3 に答える 3

3

サービスに適したタグを使用していることを確認してください。使用する必要がありますdoctrine.event_subscriber

<service id="task.task_history_insertion" class="Acme\Bundle\EventListener\TaskHistoryInsertion">
    <argument type="service" id="service_container" />
    <tag name="doctrine.event_subscriber"/>
</service>
于 2013-03-13T07:19:27.090 に答える
2

あなたはイベントサブスクライバーとイベントリスナーを混ぜています!

私はイベントリスナーに行きます:

削除する

implements EventSubscriber

public function getSubscribedEvents()
{
    return array(
        Event::postPersist
    );
}

必ず使用してください

use Doctrine\ORM\Event\LifecycleEventArgs;

そして、services.xmlがsrc / Acme / Bundle / DependencyInjection/AcmeExtension.phpにロードされること。

キャッシュをクリアすると、機能するはずです。

公式ドキュメントは http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.htmlにあります。

于 2013-03-13T07:15:16.423 に答える
0

eventListener を実装する場合は、リスナー クラスのメソッドにイベントとまったく同じ名前を付ける必要があります。あなたの例では、postPersist というパブリック メソッドが必要です。また、リスナー クラスは EventSubscriber を実装しないでください。このトピックについてより明確な図を提供できるリンクがありますhttp://docs.doctrine-project.org/en/latest/reference/events.html

于 2013-03-13T10:14:20.740 に答える