Namespaces

  • Nette
    • Application
      • Diagnostics
      • Responses
      • Routers
      • UI
    • Caching
      • Storages
    • ComponentModel
    • Config
      • Adapters
      • Extensions
    • Database
      • Diagnostics
      • Drivers
      • Reflection
      • Table
    • DI
      • Diagnostics
    • Diagnostics
    • Forms
      • Controls
      • Rendering
    • Http
    • Iterators
    • Latte
      • Macros
    • Loaders
    • Localization
    • Mail
    • Reflection
    • Security
      • Diagnostics
    • Templating
    • Utils
      • PhpGenerator
  • NetteModule
  • None
  • PHP

Classes

  • CliRouter
  • Route
  • RouteList
  • SimpleRouter
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  1: <?php
  2: 
  3: /**
  4:  * This file is part of the Nette Framework (http://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\Routers;
 13: 
 14: use Nette,
 15:     Nette\Application;
 16: 
 17: 
 18: /**
 19:  * The bidirectional route for trivial routing via query parameters.
 20:  *
 21:  * @author     David Grudl
 22:  *
 23:  * @property-read array $defaults
 24:  * @property-read int $flags
 25:  */
 26: class SimpleRouter extends Nette\Object implements Application\IRouter
 27: {
 28:     const PRESENTER_KEY = 'presenter';
 29:     const MODULE_KEY = 'module';
 30: 
 31:     /** @var string */
 32:     private $module = '';
 33: 
 34:     /** @var array */
 35:     private $defaults;
 36: 
 37:     /** @var int */
 38:     private $flags;
 39: 
 40: 
 41:     /**
 42:      * @param  array   default values
 43:      * @param  int     flags
 44:      */
 45:     public function __construct($defaults = array(), $flags = 0)
 46:     {
 47:         if (is_string($defaults)) {
 48:             $a = strrpos($defaults, ':');
 49:             if (!$a) {
 50:                 throw new Nette\InvalidArgumentException("Argument must be array or string in format Presenter:action, '$defaults' given.");
 51:             }
 52:             $defaults = array(
 53:                 self::PRESENTER_KEY => substr($defaults, 0, $a),
 54:                 'action' => $a === strlen($defaults) - 1 ? Application\UI\Presenter::DEFAULT_ACTION : substr($defaults, $a + 1),
 55:             );
 56:         }
 57: 
 58:         if (isset($defaults[self::MODULE_KEY])) {
 59:             $this->module = $defaults[self::MODULE_KEY] . ':';
 60:             unset($defaults[self::MODULE_KEY]);
 61:         }
 62: 
 63:         $this->defaults = $defaults;
 64:         $this->flags = $flags;
 65:     }
 66: 
 67: 
 68:     /**
 69:      * Maps HTTP request to a Request object.
 70:      * @return Nette\Application\Request|NULL
 71:      */
 72:     public function match(Nette\Http\IRequest $httpRequest)
 73:     {
 74:         if ($httpRequest->getUrl()->getPathInfo() !== '') {
 75:             return NULL;
 76:         }
 77:         // combine with precedence: get, (post,) defaults
 78:         $params = $httpRequest->getQuery();
 79:         $params += $this->defaults;
 80: 
 81:         if (!isset($params[self::PRESENTER_KEY]) || !is_string($params[self::PRESENTER_KEY])) {
 82:             return NULL;
 83:         }
 84: 
 85:         $presenter = $this->module . $params[self::PRESENTER_KEY];
 86:         unset($params[self::PRESENTER_KEY]);
 87: 
 88:         return new Application\Request(
 89:             $presenter,
 90:             $httpRequest->getMethod(),
 91:             $params,
 92:             $httpRequest->getPost(),
 93:             $httpRequest->getFiles(),
 94:             array(Application\Request::SECURED => $httpRequest->isSecured())
 95:         );
 96:     }
 97: 
 98: 
 99:     /**
100:      * Constructs absolute URL from Request object.
101:      * @return string|NULL
102:      */
103:     public function constructUrl(Application\Request $appRequest, Nette\Http\Url $refUrl)
104:     {
105:         if ($this->flags & self::ONE_WAY) {
106:             return NULL;
107:         }
108:         $params = $appRequest->getParameters();
109: 
110:         // presenter name
111:         $presenter = $appRequest->getPresenterName();
112:         if (strncasecmp($presenter, $this->module, strlen($this->module)) === 0) {
113:             $params[self::PRESENTER_KEY] = substr($presenter, strlen($this->module));
114:         } else {
115:             return NULL;
116:         }
117: 
118:         // remove default values; NULL values are retain
119:         foreach ($this->defaults as $key => $value) {
120:             if (isset($params[$key]) && $params[$key] == $value) { // intentionally ==
121:                 unset($params[$key]);
122:             }
123:         }
124: 
125:         $url = ($this->flags & self::SECURED ? 'https://' : 'http://') . $refUrl->getAuthority() . $refUrl->getPath();
126:         $sep = ini_get('arg_separator.input');
127:         $query = http_build_query($params, '', $sep ? $sep[0] : '&');
128:         if ($query != '') { // intentionally ==
129:             $url .= '?' . $query;
130:         }
131:         return $url;
132:     }
133: 
134: 
135:     /**
136:      * Returns default values.
137:      * @return array
138:      */
139:     public function getDefaults()
140:     {
141:         return $this->defaults;
142:     }
143: 
144: 
145:     /**
146:      * Returns flags.
147:      * @return int
148:      */
149:     public function getFlags()
150:     {
151:         return $this->flags;
152:     }
153: 
154: }
155: 
Nette Framework 2.0.11 API API documentation generated by ApiGen 2.8.0