/** * {@inheritdoc} */ public function find($modelIdentifier) { $modelName = $this->getModelName(); $identifierEvent = new ModelIdentifierEvent($modelIdentifier); $this->eventDispatcher->dispatch('model.find.before.' . $modelName, $identifierEvent); $objectManager = $this->getObjectManager(); $entity = $objectManager->find($this->entityClassName, $identifierEvent->getIdentifier()); if ($entity) { try { $objectManager->initializeObject($entity); } catch (EntityNotFoundException $e) { $entity = null; } } if ($entity) { $this->assertAbstractModelClassName($this->modelClassName); $model = $this->modelFactory->create([$entity]); $modelEvent = new ModelEvent($model); $this->eventDispatcher->dispatch('model.find.after.' . $modelName, $modelEvent); return $modelEvent->getModel(); } else { $identifierEvent = new ModelIdentifierEvent($modelIdentifier); $this->eventDispatcher->dispatch('model.find.after.not_found.' . $modelName, $identifierEvent); return null; } }
/** * @param bool $isProxy * @dataProvider findEntityNotFoundDataProvider */ public function testFindEntityNotFound($isProxy) { $identifier = 1; $this->eventDispatcher->expects($this->at(0))->method('dispatch')->with('model.find.before.test_model', new ModelIdentifierEvent($identifier)); $objectManager = $this->getMock('Doctrine\\Common\\Persistence\\ObjectManager'); if ($isProxy) { $proxy = new \DateTime(); $objectManager->expects($this->once())->method('find')->with(self::ENTITY_CLASS, $identifier)->willReturn($proxy); $objectManager->expects($this->once())->method('initializeObject')->with($proxy)->willThrowException(new EntityNotFoundException()); } else { $objectManager->expects($this->once())->method('find')->with(self::ENTITY_CLASS, $identifier)->willReturn(null); } $this->managerRegistry->expects($this->once())->method('getManagerForClass')->with(self::ENTITY_CLASS)->willReturn($objectManager); $this->modelFactory->expects($this->never())->method('create'); $this->eventDispatcher->expects($this->at(1))->method('dispatch')->with('model.find.after.not_found.test_model', new ModelIdentifierEvent($identifier)); $this->assertNull($this->repository->find($identifier)); }