Permalink
Browse files

Proxy generation as of doctrine/common#168 - DCOM-96

  • Loading branch information...
1 parent 35fda90 commit 8272ffd23fd66bac13a0dc074c868a00b82c7707 @Ocramius Ocramius committed Oct 19, 2012
View
@@ -8,4 +8,5 @@ lib/Doctrine/Common
lib/Doctrine/DBAL
/.settings/
.buildpath
-.project
+.project
+.idea
@@ -52,7 +52,7 @@ public function generate(EntityManager $em, $entity)
$identifier = array();
foreach ($idFields as $idField) {
- $value = $class->reflFields[$idField]->getValue($entity);
+ $value = $class->getFieldValue($entity, $idField);
if ( ! isset($value)) {
throw ORMException::entityMissingAssignedIdForField($entity, $idField);
@@ -605,7 +605,7 @@ class ClassMetadataInfo implements ClassMetadata
/**
* The ReflectionProperty instances of the mapped class.
*
- * @var array
+ * @var \ReflectionProperty[]
*/
public $reflFields = array();
@@ -693,13 +693,14 @@ public function getIdentifierValues($entity)
return $id;
}
- $value = $this->reflFields[$this->identifier[0]]->getValue($entity);
+ $id = $this->identifier[0];
+ $value = $this->reflFields[$id]->getValue($entity);
- if ($value !== null) {
- return array($this->identifier[0] => $value);
+ if (null === $value) {
+ return array();
}
- return array();
+ return array($id => $value);
}
/**
@@ -853,9 +853,10 @@ public function matching(Criteria $criteria)
$newObjects = $this->coll->matching($criteria)->toArray();
}
- $targetClass = $this->em->getClassMetadata(get_class($this->owner));
-
- $id = $targetClass->getSingleIdReflectionProperty()->getValue($this->owner);
+ $id = $this->em
+ ->getClassMetadata(get_class($this->owner))
+ ->getSingleIdReflectionProperty()
+ ->getValue($this->owner);
$builder = Criteria::expr();
$ownerExpression = $builder->eq($this->backRefFieldName, $id);
$expression = $criteria->getWhereExpression();
@@ -19,82 +19,11 @@
namespace Doctrine\ORM\Proxy;
-use Doctrine\ORM\Configuration;
-use Closure;
+use Doctrine\Common\Proxy\Autoloader as BaseAutoloader;
/**
- * Special Autoloader for Proxy classes because them not being PSR-0 compatible.
- *
- * @author Benjamin Eberlei <kontakt@beberlei.de>
+ * @deprecated use \Doctrine\Common\Proxy\Autoloader instead
*/
-class Autoloader
+class Autoloader extends BaseAutoloader
{
- /**
- * Resolves proxy class name to a filename based on the following pattern.
- *
- * 1. Remove Proxy namespace from class name
- * 2. Remove namespace seperators from remaining class name.
- * 3. Return PHP filename from proxy-dir with the result from 2.
- *
- * @param string $proxyDir
- * @param string $proxyNamespace
- * @param string $className
- *
- * @return string
- *
- * @throws ProxyException
- */
- static public function resolveFile($proxyDir, $proxyNamespace, $className)
- {
- if (0 !== strpos($className, $proxyNamespace)) {
- throw ProxyException::notProxyClass($className, $proxyNamespace);
- }
-
- $className = str_replace('\\', '', substr($className, strlen($proxyNamespace) +1));
- return $proxyDir . DIRECTORY_SEPARATOR . $className.'.php';
- }
-
- /**
- * Registers and returns autoloader callback for the given proxy dir and
- * namespace.
- *
- * @param string $proxyDir
- * @param string $proxyNamespace
- * @param \Closure $notFoundCallback Invoked when the proxy file is not found.
- *
- * @return \Closure
- */
- static public function register($proxyDir, $proxyNamespace, Closure $notFoundCallback = null)
- {
- $proxyNamespace = ltrim($proxyNamespace, "\\");
- $autoloader = function($className) use ($proxyDir, $proxyNamespace, $notFoundCallback) {
- if (0 === strpos($className, $proxyNamespace)) {
- $file = Autoloader::resolveFile($proxyDir, $proxyNamespace, $className);
-
- if ($notFoundCallback && ! file_exists($file)) {
- $notFoundCallback($proxyDir, $proxyNamespace, $className);
- }
-
- require $file;
- }
- };
-
- spl_autoload_register($autoloader, true, true);
-
- return $autoloader;
- }
-
- /**
- * Registers and returns autoloader callback from a Configuration instance
- *
- * @param Configuration $config
- * @param \Closure $notFoundCallback
- *
- * @return \Closure
- */
- static public function registerFromConfiguration(Configuration $configuration, Closure $notFoundCallback)
- {
- return self::register($configuration->getProxyDir(), $configuration->getProxyNamespace(), $notFoundCallback);
- }
}
-
@@ -19,7 +19,7 @@
namespace Doctrine\ORM\Proxy;
-use Doctrine\Common\Persistence\Proxy as BaseProxy;
+use Doctrine\Common\Proxy\Proxy as BaseProxy;
/**
* Interface for proxy classes.
@@ -1,69 +0,0 @@
-<?php
-/*
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This software consists of voluntary contributions made by many individuals
- * and is licensed under the MIT license. For more information, see
- * <http://www.doctrine-project.org>.
- */
-
-namespace Doctrine\ORM\Proxy;
-
-/**
- * ORM Proxy Exception.
- *
- * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
- * @link www.doctrine-project.com
- * @since 1.0
- * @author Benjamin Eberlei <kontakt@beberlei.de>
- */
-class ProxyException extends \Doctrine\ORM\ORMException
-{
- /**
- * @return ProxyException
- */
- public static function proxyDirectoryRequired()
- {
- return new self("You must configure a proxy directory. See docs for details");
- }
-
- /**
- * @return ProxyException
- */
- public static function proxyDirectoryNotWritable()
- {
- return new self("Your proxy directory must be writable.");
- }
-
- /**
- * @return ProxyException
- */
- public static function proxyNamespaceRequired()
- {
- return new self("You must configure a proxy namespace. See docs for details");
- }
-
- /**
- * @param $className
- * @param $proxyNamespace
- *
- * @return ProxyException
- */
- public static function notProxyClass($className, $proxyNamespace)
- {
- return new self(sprintf(
- "The class %s is not part of the proxy namespace %s",
- $className, $proxyNamespace
- ));
- }
-}
Oops, something went wrong.

0 comments on commit 8272ffd

Please sign in to comment.