private function createCloner(ClassMetadata $classMetadata, ReflectionProperty $reflectionId = null)
    {
        $className = $classMetadata->getName();
        $documentManager = $this->documentManager;

        return function (Proxy $cloned) use ($className, $classMetadata, $documentManager, $reflectionId) {
            if ($cloned->__isInitialized()) {
                return;
            }

            $cloned->__setInitialized(true);
            $cloned->__setInitializer(null);

            if (!$reflectionId) {
                return;
            }

            $original = $documentManager->find($className, $reflectionId->getValue($cloned));

            if (null === $original) {
                throw new UnexpectedValueException(sprintf(
                    'Proxy with ID "%s" could not be loaded',
                    $reflectionId->getValue($cloned)
                ));
            }

            foreach ($classMetadata->getReflectionClass()->getProperties() as $reflectionProperty) {
                $propertyName = $reflectionProperty->getName();

                if ($classMetadata->hasField($propertyName) || $classMetadata->hasAssociation($propertyName)) {
                    $reflectionProperty->setAccessible(true);
                    $reflectionProperty->setValue($cloned, $reflectionProperty->getValue($original));
                }
            }
        };
    }
private function createCloner(ClassMetadata $classMetadata, ReflectionProperty $reflectionId = null)
    {
        $className = $classMetadata->getName();
        $documentManager = $this->documentManager;

        return function (Proxy $cloned) use ($className, $classMetadata, $documentManager, $reflectionId) {
            if ($cloned->__isInitialized()) {
                return;
            }

            $cloned->__setInitialized(true);
            $cloned->__setInitializer(null);

            if (!$reflectionId) {
                return;
            }

            $original = $documentManager->find($className, $reflectionId->getValue($cloned));

            if (null === $original) {
                throw new UnexpectedValueException(sprintf(
                    'Proxy with ID "%s" could not be loaded',
                    $reflectionId->getValue($cloned)
                ));
            }

            foreach ($classMetadata->getReflectionClass()->getProperties() as $reflectionProperty) {
                $propertyName = $reflectionProperty->getName();

                if ($classMetadata->hasField($propertyName) || $classMetadata->hasAssociation($propertyName)) {
                    $reflectionProperty->setAccessible(true);
                    $reflectionProperty->setValue($cloned, $reflectionProperty->getValue($original));
                }
            }
        };
    }
private function createCloner ( ClassMetadata $ classMetadata , ReflectionProperty $ reflectionId = null ) { $ className = $ classMetadata -> getName ( ) ; $ documentManager = $ this -> documentManager ; return function ( Proxy $ cloned ) use ( $ className , $ classMetadata , $ documentManager , $ reflectionId ) { if ( $ cloned -> __isInitialized ( ) ) { return ; } $ cloned -> __setInitialized ( true ) ; $ cloned -> __setInitializer ( null ) ; if ( ! $ reflectionId ) { return ; } $ original = $ documentManager -> find ( $ className , $ reflectionId -> getValue ( $ cloned ) ) ; if ( null === $ original ) { throw new UnexpectedValueException ( sprintf ( 'Proxy with ID "%s" could not be loaded' , $ reflectionId -> getValue ( $ cloned ) ) ) ; } foreach ( $ classMetadata -> getReflectionClass ( ) -> getProperties ( ) as $ reflectionProperty ) { $ propertyName = $ reflectionProperty -> getName ( ) ; if ( $ classMetadata -> hasField ( $ propertyName ) || $ classMetadata -> hasAssociation ( $ propertyName ) ) { $ reflectionProperty -> setAccessible ( true ) ; $ reflectionProperty -> setValue ( $ cloned , $ reflectionProperty -> getValue ( $ original ) ) ; } } } ; }
Generates a closure capable of finalizing a cloned proxy.

@param PhpcrClassMetadata  $classMetadata
@param \ReflectionProperty $reflectionId

@throws UnexpectedValueException

@return \Closure
Generates a closure capable of finalizing a cloned proxy .