Как использовать Doctrine Entity Listener с Symfony 2.4?

Я хочу использовать Doctrine Entity Listener с Symfony 2.4.

Я создал класс:

<?php

namespace MyBundle\Listener\Entity;

use Doctrine\ORM\Event\LifecycleEventArgs;
use MyBundle\Entity\User;

class UserListener
{
    public function postPersist(User $user, LifecycleEventArgs $event)
    {
    }
}

Я добавил картографическую информацию:

<?xml version="1.0" encoding="UTF-8" ?>
<doctrine-mapping>
    <entity name="MyBundle\Entity\User">

        ...

        <entity-listeners>
            <entity-listener class="MyBundle\Listener\Entity\UserListener" />
        </entity-listeners>

    </entity>
</doctrine-mapping>

Работает нормально Но как мне передать некоторые услуги этому классу? Я хочу, чтобы он был интегрирован с сервисным контейнером Symfony и предоставляемыми сервисами.

1 ответ

Решение

Чтобы зарегистрировать конкретный экземпляр прослушивателя сущностей в Symfony, выполните следующие действия:

1) Обновите DoctrineBundle в вашем composer.json до версии 1.3 (поскольку она еще не стабильна):

{
    "require": {
        "doctrine/doctrine-bundle": "1.3.x-dev",
    }
}

2) Зарегистрируйте свой собственный сервис с именем тега "doctrine.orm.entity_listener":

my.listener:
    class: MyBundle\Listener\Entity\UserListener
    arguments: [ ... ]
    tags:
        - { name: doctrine.orm.entity_listener }

См. Документы Symfony о прослушивателях сущностей.

Другие вопросы по тегам