Слушатель событий Symfony

Привет я пытаюсь сделать прослушиватель событий Symfony после этой документации:
http://symfony.com/doc/2.8/cookbook/doctrine/event_listeners_subscribers.html

<?php

namespace FM\AppBundle\EventListener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use FM\AdminBundle\Entity\Address\BillingAddress;

class BillingAdressListener
{
/**
* @param LifecycleEventArgs $args
*/
public function listenBillingAdress(LifecycleEventArgs $args)
{
$entity = $args->getEntity();

if(!$entity instanceof BillingAddress){
return;
}

$this->postPersist($args);
}

/**
* @param LifecycleEventArgs $args
*/
public function postPersist(LifecycleEventArgs $args)
{
$em = $args->getEntityManager();
$billingAdress = $args->getEntity();

dump($billingAdress); die();
}
}

service.yml

billing_adress.listener:
class: FM\AppBundle\EventListener\BillingAdressListener
tags:
- { name: doctrine.event_listener, event: listenBillingAdress }

Но ничего не происходит, когда я отправляю форму с Платежный адрес объект.

Я сделал что-то неправильно?

1

Решение

Это называется Entity Listeners в Доктрине. Вот документация.

Не забудьте добавить ваш слушатель сущности в отображение. Например, сопоставление xml:

<entity name="AppBundle\Entity\AssignmentAttempt" table="app_assignment_attempt" >
<entity-listeners>
<entity-listener class="AppBundle\EntityListener\AssignmentAttemptListener">
<lifecycle-callback type="prePersist" method="prePersist"/>
<lifecycle-callback type="preUpdate" method="preUpdate"/>
</entity-listener>
</entity-listeners>
<!-- Rest mapping -->
</entity>

В конфиге вы можете просто добавить

app.entity_listener.assignment_attempt:
class: AppBundle\EntityListener\AssignmentAttemptListener
tags:
- { name: doctrine.orm.entity_listener }
0

Другие решения

Мой плохой, я не делал упорствовать но Обновить.

Это работает с упорствовать.

Вот мой код сейчас:

<?php

namespace FM\AppBundle\EventListener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use FM\AdminBundle\Entity\Address\BillingAddress;

class BillingAddressListener
{
/**
* @param LifecycleEventArgs $args
*/
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();

if(!$entity instanceof BillingAddress){
return;
}

$this->addNameToUser($args);
}

/**
* @param LifecycleEventArgs $args
*/
public function addNameToUser(LifecycleEventArgs $args)
{
/** @var BillingAddress $billingAdress */
$billingAdress = $args->getEntity();
$user = $billingAdress->getOwner();

if(empty($user->getFirstName())) $user->setFirstName($billingAdress->getFirstName());
if(empty($user->getLastName())) $user->setLastName($billingAdress->getLastName());
}
}

И я должен вызвать метод prePersist.
Я делал наоборот.

billing_address.listener:
class: FM\AppBundle\EventListener\BillingAddressListener
tags:
- { name: doctrine.event_listener, event: prePersist }
0

По вопросам рекламы [email protected]