Skip to content

Commit

Permalink
Proxy generation as of doctrine/common#168 - DCOM-96
Browse files Browse the repository at this point in the history
  • Loading branch information
Ocramius committed Feb 14, 2013
1 parent 35fda90 commit 8272ffd
Show file tree
Hide file tree
Showing 17 changed files with 469 additions and 764 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ lib/Doctrine/Common
lib/Doctrine/DBAL
/.settings/
.buildpath
.project
.project
.idea
2 changes: 1 addition & 1 deletion lib/Doctrine/ORM/Id/AssignedGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
11 changes: 6 additions & 5 deletions lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,7 @@ class ClassMetadataInfo implements ClassMetadata
/**
* The ReflectionProperty instances of the mapped class.
*
* @var array
* @var \ReflectionProperty[]
*/
public $reflFields = array();

Expand Down Expand Up @@ -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);
}

/**
Expand Down
7 changes: 4 additions & 3 deletions lib/Doctrine/ORM/PersistentCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
77 changes: 3 additions & 74 deletions lib/Doctrine/ORM/Proxy/Autoloader.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

2 changes: 1 addition & 1 deletion lib/Doctrine/ORM/Proxy/Proxy.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
69 changes: 0 additions & 69 deletions lib/Doctrine/ORM/Proxy/ProxyException.php

This file was deleted.

Loading

0 comments on commit 8272ffd

Please sign in to comment.