/** * @return ZRouteMap */ public function routePath($a_path, ZRoute &$a_route = null, $a_throws = false) { $path = new ZRoutePath(); $p = new ZRoute($a_path); $route =& $a_route; if (!$route) { $route = new ZRoute(); } $t = $p->getSegment(0); $t = empty($t) ? self::DEFAULT_MODULE_NAME : $t; if ($this->getLoader()->hasModule($t)) { try { $route->setModule($t); $path->module =& $this->getLoader()->module($t); } catch (ZException $e) { if ($a_throws) { throw $e; } return $path; } return $path->module->routePath($p->pop_start(), $route, $a_throws); } else { $route->setModule($this->getName()); $path->module =& $this; } if (!$path->module) { return $path; } $t = $p->getSegment(0); $t = empty($t) ? self::DEFAULT_CONTROLLER_NAME : $t; $p->pop_start(); try { $route->setController($t); $path->controller =& $path->module->getLoader()->controller($t); } catch (ZException $e) { if ($a_throws) { throw $e; } return $path; } if (!$path->controller) { return $path; } $t = $p->getSegment(0); $t = empty($t) ? self::DEFAULT_ACTION_NAME : $t; $p->pop_start(); if ($path->controller->hasAction($t)) { $route->setAction($t); $path->action = $t; } else { if ($a_throws) { throw new ZException('Action ' . $t . ' not found at ' . $path->controller->getName() . ' controller in ' . $path->module->getName() . ' module', ZControllerException::EXC_ACTION); } return $path; } foreach ($p->getSegments() as $_p) { $route->push($_p); } $route->getQuery()->setData($p->getQuery()); unset($p); return $path; }
protected final function fixroute($a_route) { $r = new ZRoute($a_route); if (!$r->getModule()) { $r->setModule($this->getConfig()->getValue('module.default_name', self::DEFAULT_MODULE_NAME)); } if (!$r->getController()) { $r->setController($this->getConfig()->getValue('controller.default_name', self::DEFAULT_CONTROLLER_NAME)); } if (!$r->getAction()) { $r->setAction($this->getConfig()->getValue('controller.default_action', self::DEFAULT_ACTION_NAME)); } $o = (string) $r; unset($r); return $o; }