1 | <?php |
||
17 | class YamlDriver extends AbstractFileDriver |
||
18 | { |
||
19 | /** |
||
20 | * {@inheritdoc} |
||
21 | */ |
||
22 | protected function loadMetadataFromFile(\ReflectionClass $class, $file) |
||
23 | { |
||
24 | $config = Yaml::parse(file_get_contents($file)); |
||
25 | |||
26 | if (!isset($config[$name = $class->getName()])) { |
||
27 | throw new \RuntimeException(sprintf('Expected metadata for class %s to be defined in %s.', $name, $file)); |
||
28 | } |
||
29 | |||
30 | $config = $config[$name]; |
||
31 | $classMetadata = new ClassMetadata($name); |
||
32 | $classMetadata->fileResources[] = $file; |
||
33 | $classMetadata->fileResources[] = $class->getFileName(); |
||
34 | |||
35 | if (isset($config['relations'])) { |
||
36 | foreach ($config['relations'] as $relation) { |
||
37 | $classMetadata->addRelation(new Relation( |
||
38 | $relation['rel'], |
||
39 | $this->createHref($relation), |
||
40 | $this->createEmbedded($relation), |
||
41 | isset($relation['attributes']) ? $relation['attributes'] : array(), |
||
42 | $this->createExclusion($relation) |
||
43 | )); |
||
44 | } |
||
45 | } |
||
46 | |||
47 | if (isset($config['relation_providers'])) { |
||
48 | foreach ($config['relation_providers'] as $relationProvider) { |
||
49 | $classMetadata->addRelationProvider(new RelationProvider($relationProvider)); |
||
50 | } |
||
51 | } |
||
52 | |||
53 | return $classMetadata; |
||
54 | } |
||
55 | |||
56 | /** |
||
57 | * {@inheritdoc} |
||
58 | */ |
||
59 | protected function getExtension() |
||
63 | |||
64 | private function parseExclusion(array $exclusion) |
||
74 | |||
75 | private function createHref($relation) |
||
89 | |||
90 | private function createEmbedded($relation) |
||
109 | |||
110 | private function createExclusion($relation) |
||
119 | } |
||
120 |