Doctrine\ODM\MongoDB\Proxy\ProxyFactory::createCloner PHP Method

createCloner() private method

Generates a closure capable of finalizing a cloned proxy
private createCloner ( Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata, DocumentPersister $documentPersister, ReflectionPropert\ReflectionProperty $reflectionId ) : Closure
$classMetadata Doctrine\Common\Persistence\Mapping\ClassMetadata
$documentPersister Doctrine\ODM\MongoDB\Persisters\DocumentPersister
$reflectionId ReflectionPropert\ReflectionProperty
return Closure
    private function createCloner(BaseClassMetadata $classMetadata, DocumentPersister $documentPersister, ReflectionProperty $reflectionId)
    {
        return function (BaseProxy $proxy) use($documentPersister, $classMetadata, $reflectionId) {
            if ($proxy->__isInitialized()) {
                return;
            }
            $proxy->__setInitialized(true);
            $proxy->__setInitializer(null);
            $id = $reflectionId->getValue($proxy);
            $original = $documentPersister->load(array('_id' => $id));
            if (null === $original) {
                if (!$this->lifecycleEventManager->documentNotFound($proxy, $id)) {
                    throw DocumentNotFoundException::documentNotFound(get_class($proxy), $id);
                }
            }
            foreach ($classMetadata->getReflectionClass()->getProperties() as $reflectionProperty) {
                $propertyName = $reflectionProperty->getName();
                if ($classMetadata->hasField($propertyName) || $classMetadata->hasAssociation($propertyName)) {
                    $reflectionProperty->setAccessible(true);
                    $reflectionProperty->setValue($proxy, $reflectionProperty->getValue($original));
                }
            }
        };
    }