%PDF- %PDF-
Direktori : /www/old2/_music/diplomka/diplomka/src/API/libs/Nette/Application/Routers/ |
Current File : /www/old2/_music/diplomka/diplomka/src/API/libs/Nette/Application/Routers/RouteList.php |
<?php /** * This file is part of the Nette Framework (http://nette.org) * * Copyright (c) 2004 David Grudl (http://davidgrudl.com) * * For the full copyright and license information, please view * the file license.txt that was distributed with this source code. */ namespace Nette\Application\Routers; use Nette; /** * The router broker. * * @author David Grudl * @property-read string $module */ class RouteList extends Nette\ArrayList implements Nette\Application\IRouter { /** @var array */ private $cachedRoutes; /** @var string */ private $module; public function __construct($module = NULL) { $this->module = $module ? $module . ':' : ''; } /** * Maps HTTP request to a Request object. * @return Nette\Application\Request|NULL */ public function match(Nette\Http\IRequest $httpRequest) { foreach ($this as $route) { $appRequest = $route->match($httpRequest); if ($appRequest !== NULL) { $appRequest->setPresenterName($this->module . $appRequest->getPresenterName()); return $appRequest; } } return NULL; } /** * Constructs absolute URL from Request object. * @return string|NULL */ public function constructUrl(Nette\Application\Request $appRequest, Nette\Http\Url $refUrl) { if ($this->cachedRoutes === NULL) { $routes = array(); $routes['*'] = array(); foreach ($this as $route) { $presenter = $route instanceof Route ? $route->getTargetPresenter() : NULL; if ($presenter === FALSE) { continue; } if (is_string($presenter)) { $presenter = strtolower($presenter); if (!isset($routes[$presenter])) { $routes[$presenter] = $routes['*']; } $routes[$presenter][] = $route; } else { foreach ($routes as $id => $foo) { $routes[$id][] = $route; } } } $this->cachedRoutes = $routes; } if ($this->module) { if (strncasecmp($tmp = $appRequest->getPresenterName(), $this->module, strlen($this->module)) === 0) { $appRequest = clone $appRequest; $appRequest->setPresenterName(substr($tmp, strlen($this->module))); } else { return NULL; } } $presenter = strtolower($appRequest->getPresenterName()); if (!isset($this->cachedRoutes[$presenter])) { $presenter = '*'; } foreach ($this->cachedRoutes[$presenter] as $route) { $url = $route->constructUrl($appRequest, $refUrl); if ($url !== NULL) { return $url; } } return NULL; } /** * Adds the router. * @param mixed * @param Nette\Application\IRouter * @return void */ public function offsetSet($index, $route) { if (!$route instanceof Nette\Application\IRouter) { throw new Nette\InvalidArgumentException("Argument must be IRouter descendant."); } parent::offsetSet($index, $route); } /** * @return string */ public function getModule() { return $this->module; } }