/** * @param Definition $parent * @param array|Definition $definition * @param array $path * @param bool $start * @return Definition * @throws RuntimeException */ public static function addChild(Definition $parent, $definition, array $path, $start = false) { if ($root = $parent->child($path[0])) { return static::addChild($root, $definition, array_slice($path, 1)); } if (isset($path[1])) { throw new RuntimeException('Parent definition not found: ' . $definition[Definition::NAME]); } $definition[Definition::NAME] = $path[0]; $start && empty($definition[Definition::ROUTE]) && isset($definition[Definition::NAME]) && ($definition[Definition::ROUTE] = $definition[Definition::NAME]); !$start && empty($definition[Definition::ROUTE]) && ($definition[Definition::ROUTE] = '/' . $path[0]); $definition = static::definition($definition); $parent->add($path[0], $definition); return $definition; }
/** * @param $name * @return Definition */ protected function config($name) { return $name === $this->definition[Definition::NAME] ? $this->definition : $this->definition->child($name); }