Source for file MultiRouter.php
Documentation is available at MultiRouter.php
6: * Copyright (c) 2004, 2009 David Grudl (http://davidgrudl.com)
8: * This source file is subject to the "Nette license" that is bundled
9: * with this package in the file license.txt.
11: * For more information please see http://nettephp.com
13: * @copyright Copyright (c) 2004, 2009 David Grudl
14: * @license http://nettephp.com/license Nette license
15: * @link http://nettephp.com
17: * @package Nette\Application
22: require_once dirname(__FILE__) .
'/../../Application/IRouter.php';
24: require_once dirname(__FILE__) .
'/../../Collections/ArrayList.php';
31: * @author David Grudl
32: * @copyright Copyright (c) 2004, 2009 David Grudl
33: * @package Nette\Application
37: /** @var array {@link MultiRouter::constructUrl()} */
38: private $cachedRoutes;
44: parent::__construct(NULL, 'IRouter');
50: * Maps HTTP request to a PresenterRequest object.
51: * @param IHttpRequest
52: * @return PresenterRequest|NULL
54: public function match(IHttpRequest $httpRequest)
56: foreach ($this as $route) {
57: $appRequest =
$route->match($httpRequest);
58: if ($appRequest !==
NULL) {
68: * Constructs absolute URL from PresenterRequest object.
69: * @param IHttpRequest
70: * @param PresenterRequest
71: * @return string|NULL
73: public function constructUrl(PresenterRequest $appRequest, IHttpRequest $httpRequest)
75: if ($this->cachedRoutes ===
NULL) {
77: $routes['*'] =
array();
79: foreach ($this as $route) {
80: $presenter =
$route instanceof
Route ?
$route->getTargetPresenter() :
NULL;
82: if ($presenter ===
FALSE) continue;
86: if (!isset($routes[$presenter])) {
87: $routes[$presenter] =
$routes['*'];
89: $routes[$presenter][] =
$route;
92: foreach ($routes as $id =>
$foo) {
93: $routes[$id][] =
$route;
98: $this->cachedRoutes =
$routes;
102: if (!isset($this->cachedRoutes[$presenter])) $presenter =
'*';
104: foreach ($this->cachedRoutes[$presenter] as $route) {
105: $uri =
$route->constructUrl($appRequest, $httpRequest);
106: if ($uri !==
NULL) {