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 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 Application
37: /** @var array {@link NMultiRouter::constructUrl()} */
38: private $cachedRoutes;
44: parent::__construct(NULL, 'IRouter');
50: * Maps HTTP request to a NPresenterRequest object.
51: * @param IHttpRequest
52: * @return NPresenterRequest|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 NPresenterRequest object.
69: * @param IHttpRequest
70: * @param NPresenterRequest
71: * @return string|NULL
73: public function constructUrl(NPresenterRequest $appRequest, IHttpRequest $httpRequest)
75: if ($this->cachedRoutes ===
NULL) {
77: $routes['*'] =
array();
79: foreach ($this as $route) {
80: $presenter =
$route instanceof
NRoute ?
$route->getTargetPresenter() :
NULL;
82: if ($presenter ===
FALSE) continue;
85: if (!isset($routes[$presenter])) {
86: $routes[$presenter] =
$routes['*'];
88: $routes[$presenter][] =
$route;
91: foreach ($routes as $id =>
$foo) {
92: $routes[$id][] =
$route;
97: $this->cachedRoutes =
$routes;
100: $presenter =
$appRequest->getPresenterName();
101: if (!isset($this->cachedRoutes[$presenter])) $presenter =
'*';
103: foreach ($this->cachedRoutes[$presenter] as $route) {
104: $uri =
$route->constructUrl($appRequest, $httpRequest);
105: if ($uri !==
NULL) {