Foros del Web » Programando para Internet » PHP » Symfony »

Doctrine eventos en repositorio propio

Estas en el tema de Doctrine eventos en repositorio propio en el foro de Symfony en Foros del Web. Buenas! Quería saber si es posible colocar los eventos de Doctrine 2 como PrePersist, en un custom repository, porque no se dispara... Un saludO!...
  #1 (permalink)  
Antiguo 12/12/2013, 11:31
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Doctrine eventos en repositorio propio

Buenas!

Quería saber si es posible colocar los eventos de Doctrine 2 como PrePersist, en un custom repository, porque no se dispara...

Un saludO!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #2 (permalink)  
Antiguo 12/12/2013, 11:54
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Doctrine eventos en repositorio propio

mmm, los eventos Doctrine no los dispara desde los repositorios sino desde el UOW, talves no estas haciendo el hook correctamente ?, de todas formas por supuesto que puedes hacer dispatch de custom events desde el repositorio, ya sea con el EM de doctrine o con el de Symfony.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 18/12/2013, 04:06
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Respuesta: Doctrine eventos en repositorio propio

Buenas,

Muchas gracias por la información,

Podrías poner un ejemplo práctico para lanzar algún evento desde el repositorio?

Gracias y un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #4 (permalink)  
Antiguo 18/12/2013, 17:33
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Doctrine eventos en repositorio propio

Hay varias formas de resolverlo, te dejo una, de todas formas ten en cuenta que no es lo ideal, deberias delegar esto en un service.

services.xml
Código XML:
Ver original
  1. <parameters>
  2.     <parameter key="app.repository.organization.class">App\CoreBundle\Entity\OrganizationRepository</parameter>
  3.     <parameter key="app.model.organization.class">App\CoreBundle\Entity\Organization</parameter>
  4. </parameters>
  5.  
  6. <services>
  7.     <service id="app.manager.organization" alias="doctrine.orm.entity_manager" />
  8.     <service id="app.repository.organization" class="%app.repository.organization.class%">
  9.         <argument type="service" id="app.manager.organization" />
  10.         <argument type="service">
  11.             <service id="app.doctrine.orm.metadata.organization"
  12.                factory-service="app.manager.organization"
  13.                factory-method="getClassMetadata"
  14.                class="Doctrine\ORM\Mapping\ClassMetadata"
  15.            >
  16.                 <argument>%app.model.organization.class%</argument>
  17.             </service>
  18.         </argument>
  19.         <argument type="service" id="event_dispatcher" />
  20.     </service>
  21. </services>

Repository
Código PHP:
Ver original
  1. namespace App\CoreBundle\Entity;
  2.  
  3. use Doctrine\ORM\EntityRepository;
  4. use Doctrine\ORM\Mapping\ClassMetadata;
  5. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  6. use Symfony\Component\EventDispatcher\Event;
  7.  
  8. class OrganizationRepository extends EntityRepository
  9. {
  10.     protected $ed;
  11.  
  12.     public function __construct($em, ClassMetadata $class, EventDispatcherInterface $ed)
  13.     {
  14.         parent::__construct($em, $class);
  15.         $this->ed = $ed;
  16.     }
  17.  
  18.     public function foo()
  19.     {
  20.         $this->ed->dispatch('foo', new Event());
  21.         ...
  22.     }
  23. }

Obviamente luego debes obtener el repositorio del container de Symfony y no del manager de Doctrine ;)

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: doctrine, eventos, propio, repositorio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:20.