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 https://nette.org
13: * @copyright Copyright (c) 2004, 2009 David Grudl
14: * @license https://nette.org/license Nette license
15: * @link https://nette.org
17: * @package Nette\Application
23: require_once dirname(__FILE__) .
'/../Application/IRouter.php';
25: require_once dirname(__FILE__) .
'/../Collections/ArrayList.php';
32: * @author David Grudl
33: * @copyright Copyright (c) 2004, 2009 David Grudl
34: * @package Nette\Application
38: /** @var string type (class, interface, PHP type) */
41: /** @var array {@link MultiRouter::constructUrl()} */
42: private $cachedRoutes;
47: * Maps HTTP request to a PresenterRequest object.
48: * @param IHttpRequest
49: * @return PresenterRequest|NULL
51: public function match(IHttpRequest $httpRequest)
53: foreach ($this as $route) {
54: $appRequest =
$route->match($httpRequest);
55: if ($appRequest !==
NULL) {
65: * Constructs absolute URL from PresenterRequest object.
66: * @param IHttpRequest
67: * @param PresenterRequest
68: * @return string|NULL
70: public function constructUrl(PresenterRequest $appRequest, IHttpRequest $httpRequest)
72: if ($this->cachedRoutes ===
NULL) {
74: $routes['*'] =
array();
76: foreach ($this as $route) {
77: $presenter =
$route instanceof
Route ?
$route->getTargetPresenter() :
NULL;
79: if ($presenter ===
FALSE) continue;
82: if (!isset($routes[$presenter])) {
83: $routes[$presenter] =
$routes['*'];
85: $routes[$presenter][] =
$route;
88: foreach ($routes as $id =>
$foo) {
89: $routes[$id][] =
$route;
94: $this->cachedRoutes =
$routes;
97: $presenter =
$appRequest->getPresenterName();
98: if (!isset($this->cachedRoutes[$presenter])) $presenter =
'*';
100: foreach ($this->cachedRoutes[$presenter] as $route) {
101: $uri =
$route->constructUrl($appRequest, $httpRequest);
102: if ($uri !==
NULL) {