Skip to content

Instantly share code, notes, and snippets.

@webdevilopers
Last active August 17, 2021 01:38
Show Gist options
  • Select an option

  • Save webdevilopers/e65f795749c40601276f60a5a3517a85 to your computer and use it in GitHub Desktop.

Select an option

Save webdevilopers/e65f795749c40601276f60a5a3517a85 to your computer and use it in GitHub Desktop.

Revisions

  1. webdevilopers revised this gist Apr 26, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion MongoEventSubscriber.php
    Original file line number Diff line number Diff line change
    @@ -30,7 +30,7 @@ public function postLoad(LifecycleEventArgs $eventArgs)
    ->reflClass->getProperty('supplier');
    $supplierReflProp->setAccessible(true);
    $supplierReflProp->setValue(
    $order, $this->em->getRepository('AcmeBundle:Supplier')
    $order, $this->_em->getRepository('AcmeBundle:Supplier')
    ->find($order->supplier())
    );
    }
  2. webdevilopers revised this gist Apr 26, 2016. 2 changed files with 12 additions and 2 deletions.
    1 change: 0 additions & 1 deletion CustomerListener.php
    Original file line number Diff line number Diff line change
    @@ -19,7 +19,6 @@ public function __construct(DocumentManager $dm)
    */
    public function __construct(Container $container)
    {
    $this->container = $container;
    $this->dm = $container->get('doctrine_mongodb.odm.default_document_manager');
    }

    13 changes: 12 additions & 1 deletion MongoEventSubscriber.php
    Original file line number Diff line number Diff line change
    @@ -2,12 +2,23 @@

    use Doctrine\ORM\EntityManager;
    use Doctrine\ODM\MongoDB\Event\LifecycleEventArgs;
    use Symfony\Component\DependencyInjection\Container;

    class MongoEventSubscriber
    {
    /**
    * @var EntityManager
    */
    private $_em;
    /*
    public function __construct(EntityManager $em)
    {
    $this->em = $em;
    $this->_em = $em;
    }
    */
    public function __construct(Container $container)
    {
    $this->_em = $container->get('doctrine.orm.default_entity_manager');
    }

    public function postLoad(LifecycleEventArgs $eventArgs)
  3. webdevilopers revised this gist Apr 26, 2016. 1 changed file with 7 additions and 3 deletions.
    10 changes: 7 additions & 3 deletions services.xml
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,7 @@
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>

    <!--
    <service id="orm.doctrine.listener" class="Acme\AppBundle\Event\DoctrineEventSubscriber">
    <argument type="service" id="doctrine.odm.mongodb.document_manager"/>
    <tag name="doctrine.event_listener" event="postLoad"/>
    @@ -15,12 +15,16 @@
    <argument type="service" id="doctrine.orm.entity_manager"/>
    <tag name="doctrine_mongodb.odm.event_listener" event="postLoad"/>
    </service>

    -->
    <service id="customer.listener" class="Acme\AppBundle\Event\BranchListener">
    <!--<argument type="service" id="doctrine.odm.mongodb.document_manager"/>-->
    <argument type="service" id="service_container" />
    <tag name="doctrine.orm.entity_listener" />
    </service>

    <service id="odm.doctrine.listener" class="Acme\AppBundle\Event\MongoEventSubscriber">
    <argument type="service" id="service_container"/>
    <tag name="doctrine_mongodb.odm.event_listener" event="postLoad"/>
    </service>

    </services>
    </container>
  4. webdevilopers revised this gist Apr 26, 2016. 2 changed files with 10 additions and 2 deletions.
    9 changes: 8 additions & 1 deletion CustomerListener.php
    Original file line number Diff line number Diff line change
    @@ -3,18 +3,25 @@
    use Doctrine\ODM\MongoDB\DocumentManager;
    use Doctrine\ORM\Event\LifecycleEventArgs;
    use Acme\AppBundle\Entity\Customer;
    use Symfony\Component\DependencyInjection\Container;

    class CustomerListener
    {
    /**
    * @var DocumentManager
    */
    private $dm;

    /*
    public function __construct(DocumentManager $dm)
    {
    $this->dm = $dm;
    }
    */
    public function __construct(Container $container)
    {
    $this->container = $container;
    $this->dm = $container->get('doctrine_mongodb.odm.default_document_manager');
    }

    public function postLoad(Customer $customer, LifecycleEventArgs $eventArgs)
    {
    3 changes: 2 additions & 1 deletion services.xml
    Original file line number Diff line number Diff line change
    @@ -17,7 +17,8 @@
    </service>

    <service id="customer.listener" class="Acme\AppBundle\Event\BranchListener">
    <argument type="service" id="doctrine.odm.mongodb.document_manager"/>
    <!--<argument type="service" id="doctrine.odm.mongodb.document_manager"/>-->
    <argument type="service" id="service_container" />
    <tag name="doctrine.orm.entity_listener" />
    </service>

  5. webdevilopers revised this gist Apr 26, 2016. 2 changed files with 39 additions and 0 deletions.
    9 changes: 9 additions & 0 deletions Customer.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,9 @@
    <?php

    /**
    * @ORM\Entity()
    * @ORM\EntityListeners({"Acme\AppBundle\Event\CustomerListener"})
    */
    class Customer()
    {
    }
    30 changes: 30 additions & 0 deletions CustomerListener.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@
    <?php

    use Doctrine\ODM\MongoDB\DocumentManager;
    use Doctrine\ORM\Event\LifecycleEventArgs;
    use Acme\AppBundle\Entity\Customer;

    class CustomerListener
    {
    /**
    * @var DocumentManager
    */
    private $dm;

    public function __construct(DocumentManager $dm)
    {
    $this->dm = $dm;
    }

    public function postLoad(Customer $customer, LifecycleEventArgs $eventArgs)
    {
    $em = $eventArgs->getEntityManager();
    $ordersReflProp = $em->getClassMetadata('AcmeAppBundle:Customer')
    ->reflClass->getProperty('orders');
    $ordersReflProp->setAccessible(true);
    $ordersReflProp->setValue(
    $customer, $this->dm->getRepository('AcmeAppBundle:Order')
    ->findBy(array('customer' => $customer->getId()))
    );
    }
    }
  6. webdevilopers revised this gist Apr 26, 2016. 1 changed file with 5 additions and 0 deletions.
    5 changes: 5 additions & 0 deletions services.xml
    Original file line number Diff line number Diff line change
    @@ -16,5 +16,10 @@
    <tag name="doctrine_mongodb.odm.event_listener" event="postLoad"/>
    </service>

    <service id="customer.listener" class="Acme\AppBundle\Event\BranchListener">
    <argument type="service" id="doctrine.odm.mongodb.document_manager"/>
    <tag name="doctrine.orm.entity_listener" />
    </service>

    </services>
    </container>
  7. webdevilopers revised this gist Apr 26, 2016. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions services.xml
    Original file line number Diff line number Diff line change
    @@ -8,12 +8,12 @@

    <service id="orm.doctrine.listener" class="Acme\AppBundle\Event\DoctrineEventSubscriber">
    <argument type="service" id="doctrine.odm.mongodb.document_manager"/>
    <tag name="doctrine.event_subscriber" event="postLoad" method="onPostLoad" />
    <tag name="doctrine.event_listener" event="postLoad"/>
    </service>

    <service id="odm.doctrine.listener" class="Acme\AppBundle\Event\MongoEventSubscriber">
    <tag name="doctrine_mongodb.odm.event_subscriber" event="postLoad" method="onPostLoad" />
    <argument type="service" id="doctrine.orm.entity_manager"/>
    <argument type="service" id="doctrine.orm.entity_manager"/>
    <tag name="doctrine_mongodb.odm.event_listener" event="postLoad"/>
    </service>

    </services>
  8. webdevilopers revised this gist Apr 26, 2016. 1 changed file with 20 additions and 0 deletions.
    20 changes: 20 additions & 0 deletions services.xml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,20 @@
    <?xml version="1.0" ?>

    <container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>

    <service id="orm.doctrine.listener" class="Acme\AppBundle\Event\DoctrineEventSubscriber">
    <argument type="service" id="doctrine.odm.mongodb.document_manager"/>
    <tag name="doctrine.event_subscriber" event="postLoad" method="onPostLoad" />
    </service>

    <service id="odm.doctrine.listener" class="Acme\AppBundle\Event\MongoEventSubscriber">
    <tag name="doctrine_mongodb.odm.event_subscriber" event="postLoad" method="onPostLoad" />
    <argument type="service" id="doctrine.orm.entity_manager"/>
    </service>

    </services>
    </container>
  9. webdevilopers revised this gist Apr 25, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion OrderController.php
    Original file line number Diff line number Diff line change
    @@ -2,7 +2,7 @@

    class OrderController extends Controller
    {
    public function listOffersAction()
    public function listCustomerOrdersAction()
    {
    $em = $this->getDoctrine()->getManager();
    $dm = $this->get('doctrine_mongodb.odm.default_document_manager');
  10. webdevilopers revised this gist Apr 25, 2016. 3 changed files with 44 additions and 7 deletions.
    File renamed without changes.
    27 changes: 27 additions & 0 deletions MongoEventSubscriber.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    <?php

    use Doctrine\ORM\EntityManager;
    use Doctrine\ODM\MongoDB\Event\LifecycleEventArgs;

    class MongoEventSubscriber
    {
    public function __construct(EntityManager $em)
    {
    $this->em = $em;
    }

    public function postLoad(LifecycleEventArgs $eventArgs)
    {
    if ($eventArgs->getObject() instanceof Order) {
    $order = $eventArgs->getDocument();
    $dm = $eventArgs->getDocumentManager();
    $supplierReflProp = $dm->getClassMetadata('AcmeBundle:Order')
    ->reflClass->getProperty('supplier');
    $supplierReflProp->setAccessible(true);
    $supplierReflProp->setValue(
    $order, $this->em->getRepository('AcmeBundle:Supplier')
    ->find($order->supplier())
    );
    }
    }
    }
    24 changes: 17 additions & 7 deletions OrderController.php
    Original file line number Diff line number Diff line change
    @@ -4,16 +4,26 @@ class OrderController extends Controller
    {
    public function listOffersAction()
    {
    $em = $this->getDoctrine()->getManager();
    $dm = $this->get('doctrine_mongodb.odm.default_document_manager');

    $eventManager = $this->getDoctrine()
    ->getManager()->getEventManager();
    $eventManager = $em->getEventManager();
    $eventManager->addEventListener(
    array(\Doctrine\ORM\Events::postLoad), new MyEventSubscriber($dm)
    array(\Doctrine\ORM\Events::postLoad), new DoctrineEventSubscriber($dm)
    );

    $customer = $this->getDoctrine()->getManager()
    ->find('AcmeBundle:Customer', 969);
    dump($customer);exit;
    }
    $eventManager2 = $dm->getEventManager();
    $eventManager2->addEventListener(
    array(\Doctrine\ODM\MongoDB\Events::postLoad), new MongoEventSubscriber($em)
    );

    $customer = $em->find('AcmeBundle:Customer', 969);
    dump($customer);
    $orders = $customer->orders();
    dump($orders[0]);
    $supplier = $orders[0]->supplier();
    dump($supplier);
    echo $supplier->fullName();
    exit;

    }
  11. webdevilopers revised this gist Apr 25, 2016. 1 changed file with 11 additions and 9 deletions.
    20 changes: 11 additions & 9 deletions MyEventSubscriber.php
    Original file line number Diff line number Diff line change
    @@ -12,14 +12,16 @@ public function __construct(DocumentManager $dm)

    public function postLoad(LifecycleEventArgs $eventArgs)
    {
    $customer = $eventArgs->getEntity();
    $em = $eventArgs->getEntityManager();
    $ordersReflProp = $em->getClassMetadata('AcmeBundle:Customer')
    ->reflClass->getProperty('orders');
    $ordersReflProp->setAccessible(true);
    $ordersReflProp->setValue(
    $customer, $this->dm->getRepository('AcmeBundle:Order')
    ->findBy(array('customer' => $customer->getId()))
    );
    if ($eventArgs->getObject() instanceof Customer) {
    $customer = $eventArgs->getEntity();
    $em = $eventArgs->getEntityManager();
    $ordersReflProp = $em->getClassMetadata('AcmeBundle:Customer')
    ->reflClass->getProperty('orders');
    $ordersReflProp->setAccessible(true);
    $ordersReflProp->setValue(
    $customer, $this->dm->getRepository('AcmeBundle:Order')
    ->findBy(array('customer' => $customer->getId()))
    );
    }
    }
    }
  12. webdevilopers revised this gist Apr 25, 2016. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions MyEventSubscriber.php
    Original file line number Diff line number Diff line change
    @@ -14,10 +14,10 @@ public function postLoad(LifecycleEventArgs $eventArgs)
    {
    $customer = $eventArgs->getEntity();
    $em = $eventArgs->getEntityManager();
    $productReflProp = $em->getClassMetadata('AcmeBundle:Customer')
    $ordersReflProp = $em->getClassMetadata('AcmeBundle:Customer')
    ->reflClass->getProperty('orders');
    $productReflProp->setAccessible(true);
    $productReflProp->setValue(
    $ordersReflProp->setAccessible(true);
    $ordersReflProp->setValue(
    $customer, $this->dm->getRepository('AcmeBundle:Order')
    ->findBy(array('customer' => $customer->getId()))
    );
  13. webdevilopers created this gist Apr 25, 2016.
    25 changes: 25 additions & 0 deletions MyEventSubscriber.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,25 @@
    <?php

    use Doctrine\ODM\MongoDB\DocumentManager;
    use Doctrine\ORM\Event\LifecycleEventArgs;

    class MyEventSubscriber
    {
    public function __construct(DocumentManager $dm)
    {
    $this->dm = $dm;
    }

    public function postLoad(LifecycleEventArgs $eventArgs)
    {
    $customer = $eventArgs->getEntity();
    $em = $eventArgs->getEntityManager();
    $productReflProp = $em->getClassMetadata('AcmeBundle:Customer')
    ->reflClass->getProperty('orders');
    $productReflProp->setAccessible(true);
    $productReflProp->setValue(
    $customer, $this->dm->getRepository('AcmeBundle:Order')
    ->findBy(array('customer' => $customer->getId()))
    );
    }
    }
    19 changes: 19 additions & 0 deletions OrderController.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,19 @@
    <?php

    class OrderController extends Controller
    {
    public function listOffersAction()
    {
    $dm = $this->get('doctrine_mongodb.odm.default_document_manager');

    $eventManager = $this->getDoctrine()
    ->getManager()->getEventManager();
    $eventManager->addEventListener(
    array(\Doctrine\ORM\Events::postLoad), new MyEventSubscriber($dm)
    );

    $customer = $this->getDoctrine()->getManager()
    ->find('AcmeBundle:Customer', 969);
    dump($customer);exit;
    }
    }