Packages

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

Classes

  • NAppForm
  • NApplication
  • NCliRouter
  • NControl
  • NDownloadResponse
  • NForwardingResponse
  • NJsonResponse
  • NLink
  • NMultiRouter
  • NPresenter
  • NPresenterComponent
  • NPresenterLoader
  • NPresenterRequest
  • NRedirectingResponse
  • NRenderResponse
  • NRoute
  • NSimpleRouter

Interfaces

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

Exceptions

  • NAbortException
  • NApplicationException
  • NBadRequestException
  • NBadSignalException
  • NForbiddenRequestException
  • NInvalidLinkException
  • NInvalidPresenterException
  • Overview
  • Package
  • 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:  * @package Nette\Application
 11:  */
 12: 
 13: 
 14: 
 15: /**
 16:  * The router broker.
 17:  *
 18:  * @author     David Grudl
 19:  * @package Nette\Application
 20:  */
 21: class NMultiRouter extends NArrayList implements IRouter
 22: {
 23:     /** @var array */
 24:     private $cachedRoutes;
 25: 
 26: 
 27: 
 28:     public function __construct()
 29:     {
 30:         parent::__construct(NULL, 'IRouter');
 31:     }
 32: 
 33: 
 34: 
 35:     /**
 36:      * Maps HTTP request to a PresenterRequest object.
 37:      * @param  IHttpRequest
 38:      * @return NPresenterRequest|NULL
 39:      */
 40:     public function match(IHttpRequest $httpRequest)
 41:     {
 42:         foreach ($this as $route) {
 43:             $appRequest = $route->match($httpRequest);
 44:             if ($appRequest !== NULL) {
 45:                 return $appRequest;
 46:             }
 47:         }
 48:         return NULL;
 49:     }
 50: 
 51: 
 52: 
 53:     /**
 54:      * Constructs absolute URL from PresenterRequest object.
 55:      * @param  IHttpRequest
 56:      * @param  NPresenterRequest
 57:      * @return string|NULL
 58:      */
 59:     public function constructUrl(NPresenterRequest $appRequest, IHttpRequest $httpRequest)
 60:     {
 61:         if ($this->cachedRoutes === NULL) {
 62:             $routes = array();
 63:             $routes['*'] = array();
 64: 
 65:             foreach ($this as $route) {
 66:                 $presenter = $route instanceof NRoute ? $route->getTargetPresenter() : NULL;
 67: 
 68:                 if ($presenter === FALSE) continue;
 69: 
 70:                 if (is_string($presenter)) {
 71:                     $presenter = strtolower($presenter);
 72:                     if (!isset($routes[$presenter])) {
 73:                         $routes[$presenter] = $routes['*'];
 74:                     }
 75:                     $routes[$presenter][] = $route;
 76: 
 77:                 } else {
 78:                     foreach ($routes as $id => $foo) {
 79:                         $routes[$id][] = $route;
 80:                     }
 81:                 }
 82:             }
 83: 
 84:             $this->cachedRoutes = $routes;
 85:         }
 86: 
 87:         $presenter = strtolower($appRequest->getPresenterName());
 88:         if (!isset($this->cachedRoutes[$presenter])) $presenter = '*';
 89: 
 90:         foreach ($this->cachedRoutes[$presenter] as $route) {
 91:             $uri = $route->constructUrl($appRequest, $httpRequest);
 92:             if ($uri !== NULL) {
 93:                 return $uri;
 94:             }
 95:         }
 96: 
 97:         return NULL;
 98:     }
 99: 
100: }
101: 
Nette Framework 0.9.7 (for PHP 5.2) API documentation generated by ApiGen 2.3.0