Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/12/2013, 17:33
Avatar de masterpuppet
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 :)