Symfony2 - lyttere på læren / orm

stemmer
4

Hva er den beste måten å ha et arrangement som branner etter en rekord er satt inn i Symfony2 / Lære?

Publisert på 07/06/2011 klokken 21:40
kilden bruker
På andre språk...                            


2 svar

stemmer
10

Først registrerer en tjeneste som Lære hendelse lytteren:

app/config.yml:

services:
    foo.listener:
        class: Vendor\FooBundle\BarClass
        tags:
            - { name: doctrine.event_listener, event: postPersist, method: onPostPersist }

Så i lytteren klassen definerer en onPostPersistmetode (eller hva du heter metoden i config) som tar et Doctrine\ORM\Event\LifecycleEventArgsargument:

public function onPostPersist(LifecycleEventArgs $eventArgs)
{
    // do stuff with the entity here
}

Merk at du ikke kan passere en forekomst av EntityManager til lytteren klassen, fordi $ EventArgs inneholder en referanse til det, og dette vil kaste en CircularReferenceException.

Lære Prosjekt dokumentasjon her . Symfony Prosjekt dokumentasjon her (utdatert, men inkludert som referanse) /

Svarte 07/06/2011 kl. 22:54
kilden bruker

stemmer
1

Prøv å injisere beholderen selv i stedet for sikkerhetskonteksten. med FOS_USER avhenger security.context på lytteren (EM) og lytteren krever security.context.

<service id="foo.listener" class="%foo.listener.class%">
  <argument type="service" id="service_container"/>
  <tag name="doctrine.event_listener" event="postPersist" method="fooMethod" />
</service>

Forresten, i hvert fall i XML, metodenavnet ser ikke ut til å virke, som standard kaller metoden 'postPersist' i stedet og ignorere uansett metode navnet du gir (fooMethod); Vennligst gi meg beskjed hvis det er tilfelle med YAML config, også, eller er jeg bare galt.

Svarte 16/05/2013 kl. 00:25
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more