/** * Set node */ public function node() { $args = func_get_args(); if (count($args) < 1) { throw new \RuntimeException("Missing argument. Must 1 arguments at minimum."); } $node = new Node(); if (count($args) === 1) { // When it's passed 1 argument, register node with name only. $node->setName($args[0]); } elseif (count($args) === 2) { // When it's passed 2 arguments, register node with roles and some options. $node->setName($args[0]); if (is_string($args[1]) || Arr::isVector($args[1])) { $node->setReferenceRoles($args[1]); } else { if (isset($args[1]['roles'])) { $node->setReferenceRoles($args[1]['roles']); unset($args[1]['roles']); } $node->setOptions($args[1]); } } else { // When it's passed more than 3 arguments, register node with roles and some options. $node->setName($args[0]); $node->setOptions($args[1]); $node->setReferenceRoles($args[2]); } $this->container->set("nodes/" . $node->getName(), $node); $roles = $node->getReferenceRoles(); if ($roles) { if (is_string($roles)) { $this->role($roles, $node->getName()); } else { if (is_array($roles)) { foreach ($roles as $role) { $this->role($role, $node->getName()); } } } } return $node; }