/** * (non-PHPdoc) * @see Gedmo\Mapping.Driver::readExtendedMetadata() */ public function readExtendedMetadata(ClassMetadataInfo $meta, array &$config) { require_once __DIR__ . '/../Annotations.php'; $reader = new AnnotationReader(); $reader->setAnnotationNamespaceAlias('Gedmo\\Tree\\Mapping\\', 'gedmo'); $class = $meta->getReflectionClass(); // property annotations foreach ($class->getProperties() as $property) { if ($meta->isMappedSuperclass && !$property->isPrivate() || $meta->isInheritedField($property->name) || $meta->isInheritedAssociation($property->name)) { continue; } // left if ($left = $reader->getPropertyAnnotation($property, self::ANNOTATION_LEFT)) { $field = $property->getName(); if (!$meta->hasField($field)) { throw MappingException::fieldMustBeMapped($field, $meta->name); } if (!$this->_isValidField($meta, $field)) { throw MappingException::notValidFieldType($field, $meta->name); } $config['left'] = $field; } // right if ($right = $reader->getPropertyAnnotation($property, self::ANNOTATION_RIGHT)) { $field = $property->getName(); if (!$meta->hasField($field)) { throw MappingException::fieldMustBeMapped($field, $meta->name); } if (!$this->_isValidField($meta, $field)) { throw MappingException::notValidFieldType($field, $meta->name); } $config['right'] = $field; } // ancestor/parent if ($parent = $reader->getPropertyAnnotation($property, self::ANNOTATION_PARENT)) { $field = $property->getName(); if (!$meta->isSingleValuedAssociation($field)) { throw MappingException::parentFieldNotMappedOrRelated($field, $meta->name); } $config['parent'] = $field; } // level if ($parent = $reader->getPropertyAnnotation($property, self::ANNOTATION_LEVEL)) { $field = $property->getName(); if (!$meta->hasField($field)) { throw MappingException::fieldMustBeMapped($field, $meta->name); } if (!$this->_isValidField($meta, $field)) { throw MappingException::notValidFieldType($field, $meta->name); } $config['level'] = $field; } } }
/** * (non-PHPdoc) * @see Gedmo\Mapping.Driver::readExtendedMetadata() */ public function readExtendedMetadata(ClassMetadataInfo $meta, array &$config) { $yaml = $this->_loadMappingFile($this->_findMappingFile($meta->name)); $mapping = $yaml[$meta->name]; if (isset($mapping['fields'])) { foreach ($mapping['fields'] as $field => $fieldMapping) { if (isset($fieldMapping['gedmo']['tree'])) { $mappingProperty = $fieldMapping['gedmo']['tree']; if ($mappingProperty == 'left') { if (!$this->_isValidField($meta, $field)) { throw MappingException::notValidFieldType($field, $meta->name); } $config['left'] = $field; } elseif ($mappingProperty == 'right') { if (!$this->_isValidField($meta, $field)) { throw MappingException::notValidFieldType($field, $meta->name); } $config['right'] = $field; } elseif ($mappingProperty == 'level') { if (!$this->_isValidField($meta, $field)) { throw MappingException::notValidFieldType($field, $meta->name); } $config['level'] = $field; } } } } if (isset($mapping['manyToOne'])) { foreach ($mapping['manyToOne'] as $field => $relationMapping) { if (isset($relationMapping['gedmo']['tree'])) { $mappingProperty = $relationMapping['gedmo']['tree']; if ($mappingProperty == 'parent') { if ($relationMapping['targetEntity'] != $meta->name) { throw MappingException::parentFieldNotMappedOrRelated($field, $meta->name); } $config['parent'] = $field; } } } } }