/** * @param array $data * @return array * @throws \Taxonomy\Exception\RuntimeException */ protected function validate(array $data) { $taxonomy = $data['taxonomy']; $parent = isset($data['parent']) ? $data['parent'] : null; if (!is_object($taxonomy)) { $taxonomy = $data['taxonomy'] = $this->taxonomyManager->getTaxonomy($taxonomy); } if ($parent && !is_object($parent)) { $parent = $data['parent'] = $this->taxonomyManager->getTerm($parent); } $options = $this->getModuleOptions()->getType($taxonomy->getName()); if ($parent === null && !$options->isRootable()) { throw new RuntimeException(sprintf('Taxonomy "%s" is not rootable.', $taxonomy->getName())); } elseif ($parent instanceof TaxonomyTermInterface) { $parentType = $parent->getTaxonomy()->getName(); $objectType = $taxonomy->getName(); $objectOptions = $this->getModuleOptions()->getType($objectType); if (!$objectOptions->isParentAllowed($parentType)) { throw new RuntimeException(sprintf('Parent "%s" does not allow child "%s"', $parentType, $objectType)); } } $data['term'] = $this->getTermManager()->createTerm($data['term']['name'], $taxonomy->getInstance()); return $data; }