%PDF- %PDF-
Direktori : /www/old2/_music/diplomka/diplomka/src/API/libs/Nette/Application/Routers/ |
Current File : /www/old2/_music/diplomka/diplomka/src/API/libs/Nette/Application/Routers/CliRouter.php |
<?php /** * This file is part of the Nette Framework (http://nette.org) * * Copyright (c) 2004 David Grudl (http://davidgrudl.com) * * For the full copyright and license information, please view * the file license.txt that was distributed with this source code. */ namespace Nette\Application\Routers; use Nette, Nette\Application; /** * The unidirectional router for CLI. (experimental) * * @author David Grudl * * @property-read array $defaults */ class CliRouter extends Nette\Object implements Application\IRouter { const PRESENTER_KEY = 'action'; /** @var array */ private $defaults; /** * @param array default values */ public function __construct($defaults = array()) { $this->defaults = $defaults; } /** * Maps command line arguments to a Request object. * @return Nette\Application\Request|NULL */ public function match(Nette\Http\IRequest $httpRequest) { if (empty($_SERVER['argv']) || !is_array($_SERVER['argv'])) { return NULL; } $names = array(self::PRESENTER_KEY); $params = $this->defaults; $args = $_SERVER['argv']; array_shift($args); $args[] = '--'; foreach ($args as $arg) { $opt = preg_replace('#/|-+#A', '', $arg); if ($opt === $arg) { if (isset($flag) || $flag = array_shift($names)) { $params[$flag] = $arg; } else { $params[] = $arg; } $flag = NULL; continue; } if (isset($flag)) { $params[$flag] = TRUE; $flag = NULL; } if ($opt !== '') { $pair = explode('=', $opt, 2); if (isset($pair[1])) { $params[$pair[0]] = $pair[1]; } else { $flag = $pair[0]; } } } if (!isset($params[self::PRESENTER_KEY])) { throw new Nette\InvalidStateException('Missing presenter & action in route definition.'); } $presenter = $params[self::PRESENTER_KEY]; if ($a = strrpos($presenter, ':')) { $params[self::PRESENTER_KEY] = substr($presenter, $a + 1); $presenter = substr($presenter, 0, $a); } return new Application\Request( $presenter, 'CLI', $params ); } /** * This router is only unidirectional. * @return NULL */ public function constructUrl(Application\Request $appRequest, Nette\Http\Url $refUrl) { return NULL; } /** * Returns default values. * @return array */ public function getDefaults() { return $this->defaults; } }