Namespaces

  • Nette
    • Application
    • Caching
    • Collections
    • Config
    • Forms
    • IO
    • Loaders
    • Mail
    • Reflection
    • Security
    • Templates
    • Web
  • None
  • PHP

Classes

  • AppForm
  • Application
  • CliRouter
  • Control
  • DownloadResponse
  • ForwardingResponse
  • JsonResponse
  • Link
  • MultiRouter
  • Presenter
  • PresenterComponent
  • PresenterLoader
  • PresenterRequest
  • RedirectingResponse
  • RenderResponse
  • Route
  • SimpleRouter

Interfaces

  • IPartiallyRenderable
  • IPresenter
  • IPresenterLoader
  • IPresenterResponse
  • IRenderable
  • IRouter
  • ISignalReceiver
  • IStatePersistent

Exceptions

  • AbortException
  • ApplicationException
  • BadRequestException
  • BadSignalException
  • ForbiddenRequestException
  • InvalidLinkException
  • InvalidPresenterException
  • Overview
  • Namespace
  • Class
  • Tree
  • Other releases
  1: <?php
  2: 
  3: /**
  4:  * This file is part of the Nette Framework (https://nette.org)
  5:  *
  6:  * Copyright (c) 2004 David Grudl (http://davidgrudl.com)
  7:  *
  8:  * For the full copyright and license information, please view
  9:  * the file license.txt that was distributed with this source code.
 10:  */
 11: 
 12: namespace Nette\Application;
 13: 
 14: use Nette;
 15: 
 16: 
 17: 
 18: /**
 19:  * The router broker.
 20:  *
 21:  * @author     David Grudl
 22:  */
 23: class MultiRouter extends Nette\Collections\ArrayList implements IRouter
 24: {
 25:     /** @var array */
 26:     private $cachedRoutes;
 27: 
 28: 
 29: 
 30:     public function __construct()
 31:     {
 32:         parent::__construct(NULL, 'Nette\Application\IRouter');
 33:     }
 34: 
 35: 
 36: 
 37:     /**
 38:      * Maps HTTP request to a PresenterRequest object.
 39:      * @param  Nette\Web\IHttpRequest
 40:      * @return PresenterRequest|NULL
 41:      */
 42:     public function match(Nette\Web\IHttpRequest $httpRequest)
 43:     {
 44:         foreach ($this as $route) {
 45:             $appRequest = $route->match($httpRequest);
 46:             if ($appRequest !== NULL) {
 47:                 return $appRequest;
 48:             }
 49:         }
 50:         return NULL;
 51:     }
 52: 
 53: 
 54: 
 55:     /**
 56:      * Constructs absolute URL from PresenterRequest object.
 57:      * @param  Nette\Web\IHttpRequest
 58:      * @param  PresenterRequest
 59:      * @return string|NULL
 60:      */
 61:     public function constructUrl(PresenterRequest $appRequest, Nette\Web\IHttpRequest $httpRequest)
 62:     {
 63:         if ($this->cachedRoutes === NULL) {
 64:             $routes = array();
 65:             $routes['*'] = array();
 66: 
 67:             foreach ($this as $route) {
 68:                 $presenter = $route instanceof Route ? $route->getTargetPresenter() : NULL;
 69: 
 70:                 if ($presenter === FALSE) continue;
 71: 
 72:                 if (is_string($presenter)) {
 73:                     $presenter = strtolower($presenter);
 74:                     if (!isset($routes[$presenter])) {
 75:                         $routes[$presenter] = $routes['*'];
 76:                     }
 77:                     $routes[$presenter][] = $route;
 78: 
 79:                 } else {
 80:                     foreach ($routes as $id => $foo) {
 81:                         $routes[$id][] = $route;
 82:                     }
 83:                 }
 84:             }
 85: 
 86:             $this->cachedRoutes = $routes;
 87:         }
 88: 
 89:         $presenter = strtolower($appRequest->getPresenterName());
 90:         if (!isset($this->cachedRoutes[$presenter])) $presenter = '*';
 91: 
 92:         foreach ($this->cachedRoutes[$presenter] as $route) {
 93:             $uri = $route->constructUrl($appRequest, $httpRequest);
 94:             if ($uri !== NULL) {
 95:                 return $uri;
 96:             }
 97:         }
 98: 
 99:         return NULL;
100:     }
101: 
102: }
103: 
Nette Framework 0.9.7 API documentation generated by ApiGen 2.3.0