public function loadClassMetadata(ClassMetadataInterface $classMetadata)
{
if (null === $this->classes) {
- if (!stream_is_local($this->file)) {
- throw new MappingException(sprintf('This is not a local file "%s".', $this->file));
- }
-
- if (null === $this->yamlParser) {
- $this->yamlParser = new Parser();
- }
-
- $classes = $this->yamlParser->parse(file_get_contents($this->file));
-
- if (empty($classes)) {
- return false;
- }
-
- // not an array
- if (!is_array($classes)) {
- throw new MappingException(sprintf('The file "%s" must contain a YAML array.', $this->file));
- }
+ $this->classes = $this->getClassesFromYaml();
+ }
- $this->classes = $classes;
+ if (!$this->classes) {
+ return false;
}
if (!isset($this->classes[$classMetadata->getName()])) {
$attributeMetadata->addGroup($group);
}
}
+
+ if (isset($data['max_depth'])) {
+ if (!is_int($data['max_depth'])) {
+ throw new MappingException(sprintf('The "max_depth" value must be an integer in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName()));
+ }
+
+ $attributeMetadata->setMaxDepth($data['max_depth']);
+ }
}
}
return true;
}
+
+ /**
+ * Return the names of the classes mapped in this file.
+ *
+ * @return string[] The classes names
+ */
+ public function getMappedClasses()
+ {
+ if (null === $this->classes) {
+ $this->classes = $this->getClassesFromYaml();
+ }
+
+ return array_keys($this->classes);
+ }
+
+ private function getClassesFromYaml()
+ {
+ if (!stream_is_local($this->file)) {
+ throw new MappingException(sprintf('This is not a local file "%s".', $this->file));
+ }
+
+ if (null === $this->yamlParser) {
+ $this->yamlParser = new Parser();
+ }
+
+ $classes = $this->yamlParser->parse(file_get_contents($this->file));
+
+ if (empty($classes)) {
+ return array();
+ }
+
+ if (!is_array($classes)) {
+ throw new MappingException(sprintf('The file "%s" must contain a YAML array.', $this->file));
+ }
+
+ return $classes;
+ }
}