Doctrine\Search\Mapping\Driver\AnnotationDriver::loadMetadataForClass PHP Метод

loadMetadataForClass() публичный Метод

public loadMetadataForClass ( string $className, Doctrine\Common\Persistence\Mapping\ClassMetadata $metadata )
$className string
$metadata Doctrine\Common\Persistence\Mapping\ClassMetadata
    public function loadMetadataForClass($className, ClassMetadata $metadata)
    {
        $class = $metadata->getReflectionClass();
        if (!$class) {
            $class = new \ReflectionClass((string) $className);
        }
        $classAnnotations = $this->reader->getClassAnnotations($class);
        $classMapping = array();
        $validMapping = false;
        foreach ($classAnnotations as $annotation) {
            switch (get_class($annotation)) {
                case 'Doctrine\\Search\\Mapping\\Annotations\\ElasticSearchable':
                    $classMapping = (array) $annotation;
                    $classMapping['class'] = 'ElasticSearchable';
                    $validMapping = true;
                    break;
                case 'Doctrine\\Search\\Mapping\\Annotations\\Searchable':
                    $classMapping = (array) $annotation;
                    $classMapping['class'] = 'Searchable';
                    $validMapping = true;
                    break;
                case 'Doctrine\\Search\\Mapping\\Annotations\\ElasticRoot':
                    $rootMapping = (array) $annotation;
                    $metadata->mapRoot($this->rootToArray($rootMapping));
                    break;
            }
        }
        if (!$validMapping) {
            throw MappingException::classIsNotAValidDocument($className);
        }
        $this->annotateClassMetadata($classMapping, $metadata);
        $properties = $class->getProperties();
        foreach ($properties as $property) {
            $propertyAnnotations = $this->reader->getPropertyAnnotations($property);
            foreach ($propertyAnnotations as $annotation) {
                switch (get_class($annotation)) {
                    case 'Doctrine\\Search\\Mapping\\Annotations\\Id':
                        $metadata->identifier = $property->getName();
                        break;
                    case 'Doctrine\\Search\\Mapping\\Annotations\\Parameter':
                        $mapping = $this->parameterToArray($property->getName(), (array) $annotation);
                        $metadata->mapParameter($mapping);
                        break;
                    case 'Doctrine\\Search\\Mapping\\Annotations\\Field':
                    case 'Doctrine\\Search\\Mapping\\Annotations\\ElasticField':
                    case 'Doctrine\\Search\\Mapping\\Annotations\\SolrField':
                        $mapping = $this->fieldToArray($property->getName(), (array) $annotation);
                        $metadata->mapField($mapping);
                        break;
                }
            }
        }
    }

Usage Example

Пример #1
0
 public function testLoadMetadataForClass()
 {
     $className = 'Doctrine\\Tests\\Models\\Comments\\User';
     $metadata = new ClassMetadata($className);
     $this->annotationDriver->loadMetadataForClass($className, $metadata);
     $expected = $this->loadExpectedMetadataFor($className, 'users');
     $this->assertEquals($expected, $metadata);
 }
All Usage Examples Of Doctrine\Search\Mapping\Driver\AnnotationDriver::loadMetadataForClass