Commit 37cb86fe authored by guilhermeblanco's avatar guilhermeblanco

[2.0][DDC-260] Added support for better error reporting on ClassMetadata

parent 9cd0379f
......@@ -136,16 +136,23 @@ class ClassMetadata extends ClassMetadataInfo
*
* @param array $mapping The field mapping to validated & complete.
* @return array The validated and completed field mapping.
*
* @throws MappingException
*/
protected function _validateAndCompleteFieldMapping(array &$mapping)
{
parent::_validateAndCompleteFieldMapping($mapping);
// Store ReflectionProperty of mapped field
try {
$refProp = $this->reflClass->getProperty($mapping['fieldName']);
$refProp->setAccessible(true);
$this->reflFields[$mapping['fieldName']] = $refProp;
}
catch(\ReflectionException $e) {
throw MappingException::reflectionFailure($this->name, $e);
}
}
/**
* Extracts the identifier values of an entity of this class.
......@@ -234,10 +241,16 @@ class ClassMetadata extends ClassMetadataInfo
// Store ReflectionProperty of mapped field
$sourceFieldName = $assocMapping->sourceFieldName;
try {
$refProp = $this->reflClass->getProperty($sourceFieldName);
$refProp->setAccessible(true);
$this->reflFields[$sourceFieldName] = $refProp;
}
catch(\ReflectionException $e) {
throw MappingException::reflectionFailure($this->name, $e);
}
}
/**
* Dispatches the lifecycle event of the given entity to the registered
......@@ -358,23 +371,35 @@ class ClassMetadata extends ClassMetadataInfo
{
// Restore ReflectionClass and properties
$this->reflClass = new \ReflectionClass($this->name);
foreach ($this->fieldMappings as $field => $mapping) {
try {
if (isset($mapping['inherited'])) {
$reflField = new \ReflectionProperty($mapping['inherited'], $field);
} else {
$reflField = $this->reflClass->getProperty($field);
}
$reflField->setAccessible(true);
$this->reflFields[$field] = $reflField;
} catch(\ReflectionException $e) {
throw MappingException::reflectionFailure($this->name, $e);
}
}
foreach ($this->associationMappings as $field => $mapping) {
try {
if (isset($this->inheritedAssociationFields[$field])) {
$reflField = new \ReflectionProperty($this->inheritedAssociationFields[$field], $field);
} else {
$reflField = $this->reflClass->getProperty($field);
}
$reflField->setAccessible(true);
$this->reflFields[$field] = $reflField;
} catch(\ReflectionException $e) {
throw MappingException::reflectionFailure($this->name, $e);
}
}
//$this->prototype = unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name));
......
......@@ -103,4 +103,16 @@ class MappingException extends \Doctrine\Common\DoctrineException
{
return new self("The mapping of field '$fieldName' is invalid.");
}
/**
* Exception for reflection exceptions - adds the entity name,
* because there might be long classnames that will be shortened
* within the stacktrace
*
* @param string $entity The entity's name
* @param \ReflectionException $previousException
*/
public static function reflectionFailure($entity, \ReflectionException $previousException) {
return new self('An error occurred in ' . $entity, $previousException);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment