/** * @param ObjectAdapterManager $oma */ public function __construct(ObjectAdapterManager $oma) { $this->objectAdapterManager = $oma; $this->configuration = $this->objectAdapterManager->getConfiguration(); $this->setCacheDriver($this->configuration->getMetadataCacheImpl()); $this->driver = $this->configuration->getMetadataDriverImpl(); $this->evm = $this->objectAdapterManager->getEventManager(); }
public function testLoadClassMetadataEvent() { $listener = new Listener(); $evm = $this->objectAdapterManager->getEventManager(); $evm->addEventListener(array(Event::loadClassMetadata), $listener); $meta = $this->getMetadataFor('Doctrine\\Tests\\ORM\\ODMAdapter\\Mapping\\Driver\\Model\\ReferenceMappingObject'); $this->assertTrue($listener->called); $this->assertSame($this->objectAdapterManager, $listener->oma); $this->assertSame($meta, $listener->meta); }
/** * Method will go through all mapped referenced objects and schedule them * for update if not jet done. * * @todo Check an own change compute mechanism. * Compute for Changes will be done inside the reference's UoW. */ private function computeReferencedObjectsForUpdate() { foreach ($this->referencedObjects as $reference) { if (null === $this->getScheduledObjectForUpdate($reference['object'], $reference['fieldName']) && null === $this->getScheduledObjectForRemove($reference['object'], $reference['fieldName'])) { $classMetadata = $this->objectAdapterManager->getClassMetadata(get_class($reference['object'])); // its same behavior as for update after persist if ($invoke = $this->eventListenersInvoker->getSubscribedSystems($classMetadata, Event::preUpdateReference)) { $this->eventListenersInvoker->invoke($classMetadata, Event::preUpdateReference, $reference['object'], new LifecycleEventArgs($this->objectAdapterManager, $reference['fieldName'], $reference['object']), $invoke); } $this->syncCommonFields($reference['object'], $reference['referencedObject'], $classMetadata); $this->scheduleReferenceForUpdate($reference['object'], $reference['referencedObject'], $reference['fieldName']); } } }
private function createObjectAdapterManager() { $configuration = new Configuration(); $configuration->setManagers(array('reference-phpcr' => array('default' => $this->dm), 'reference-dbal-orm' => array('default' => $this->em))); $configuration->setClassMetadataFactoryName('Doctrine\\ORM\\ODMAdapter\\Mapping\\ClassMetadataFactory'); $cache = new ArrayCache(); $reader = new AnnotationReader($cache); $annotationDriver = new AnnotationDriver($reader); $annotationDriver->addPaths(array(__DIR__ . "/../../../Models")); $configuration->setMetadataDriverImpl($annotationDriver); $configuration->setProxyDir(__DIR__ . '/cache'); $configuration->setAutoGenerateProxyClasses(true); $configuration->setProxyNamespace('__Test__'); $configuration->setClassMetadataFactoryName('Doctrine\\ORM\\ODMAdapter\\Mapping\\ClassMetadataFactory'); $this->objectAdapterManager = ObjectAdapterManager::create($configuration); $this->objectAdapterManager->addListenersToEventManagers(); }
/** * Detects if an object is mapped and if it isn't scheduled in the UoW as an reference to avoid * circular references. * * @param $object * @param \Doctrine\ORM\ODMAdapter\ObjectAdapterManager $objectAdapterManager * @return bool */ protected function isReferenceable($object, ObjectAdapterManager $objectAdapterManager) { return !$objectAdapterManager->hasValidMapping(get_class($object)) || $objectAdapterManager->isReferenced($object) || $objectAdapterManager->isSleepingProxy($object) ? false : true; }
/** * Initializes a new ListenersInvoker instance. * * @param ObjectAdapterManager $objectAdapterManager */ public function __construct(ObjectAdapterManager $objectAdapterManager) { $this->eventManager = $objectAdapterManager->getEventManager(); $this->objectAdapterManager = $objectAdapterManager; }
/** * @expectedException \Doctrine\ORM\ODMAdapter\Exception\MappingException * @expectedExceptionMessage No reference mapping on stdClass */ public function testGetManagerObjectWithoutTypeThrowsException() { $this->objectAdapterManager->getManager(new \stdClass(), 'test-field'); }
/** * Detects if an object is mapped and if it isn't scheduled in the UoW as an reference to avoid * circular references. * * @param $object * @return bool */ protected function isReferenceable($object) { return !$this->objectAdapterManager->hasValidMapping(get_class($object)) || $this->objectAdapterManager->isReferenced($object) ? false : true; }