Doctrine\Search\Mapping\Driver\YamlDriver::loadMetadataForClass PHP Method

loadMetadataForClass() public method

{@inheritDoc}
public loadMetadataForClass ( $className, Doctrine\Common\Persistence\Mapping\ClassMetadata $metadata )
$metadata Doctrine\Common\Persistence\Mapping\ClassMetadata
    public function loadMetadataForClass($className, ClassMetadata $metadata)
    {
        /* @var $metadata \Doctrine\Search\Mapping\ClassMetadata */
        $hierarchy = array_merge(array($className), class_parents($className));
        // Look for mappings in the class heirarchy and merge
        $element = array();
        foreach (array_reverse($hierarchy) as $subClassName) {
            try {
                $element = array_merge($element, $this->getElement($subClassName));
            } catch (CommonMappingException $e) {
            }
        }
        if (empty($element)) {
            throw MappingException::mappingFileNotFound($className);
        }
        $this->annotateClassMetadata($element, $metadata);
        // Evaluate root mappings
        if (isset($element['root'])) {
            foreach ($element['root'] as $rootMapping) {
                $metadata->mapRoot($this->rootToArray($rootMapping));
            }
        }
        // Evaluate id
        if (isset($element['id'])) {
            $metadata->identifier = $element['id'];
        }
        // Evaluate field mappings
        if (isset($element['fields'])) {
            foreach ($element['fields'] as $name => $fieldMapping) {
                $mapping = $this->fieldToArray($name, $fieldMapping);
                $metadata->mapField($mapping);
            }
        }
        // Evaluate parameter mappings
        if (isset($element['parameters'])) {
            foreach ($element['parameters'] as $name => $parameterMapping) {
                $mapping = $this->parameterToArray($name, $parameterMapping);
                $metadata->mapParameter($mapping);
            }
        }
    }

Usage Example

示例#1
0
 public function testLoadMetadataForSubClass()
 {
     $className = __NAMESPACE__ . '\\YamlSuperUser';
     $metadata = new ClassMetadata($className);
     $this->yamlDriver->loadMetadataForClass($className, $metadata);
     $expected = $this->loadExpectedMetadataFor($className, 'superusers');
     $this->assertEquals($expected, $metadata);
 }