|
|
<?php namespace Majestic\App\Router; /** * @copyright NetMonsters <team@netmonsters.ru> * @link http://netmonsters.ru * @package Majestic * @subpackage app * @since 2010-02-25 */
class Router { /** * @var Route[] */ protected $routes = array();
/** * @var string */ protected $route_name;
protected $default_layout = 'Default';
protected $error_layout = 'Error';
/** * @var Route */ protected $route;
public function add($name, $route, $action, $params = array(), $layout = null) { if (!$layout) { $layout = $this->default_layout; } $this->routes[$name] = new Route($route, $action, $params, $layout); }
/** * @param $request * @return bool|Route */ public function route($request) { $req = explode('/', trim($request, '/'));
foreach ($this->routes as $name => $route) { if ($route->match($req)) { $this->route_name = $name; $this->route = $route; \Majestic\Env::setParams($route->getParams()); return $this->route; } } return false; }
/** * Set default layout name * @param string $layout */ public function setDefaultLayout($layout = 'Default') { $this->default_layout = $layout; }
/** * Sets the name of error page layout * @param string $layout */ public function setErrorLayout($layout = 'Error') { $this->error_layout = $layout; }
/** * Returns error layout name * @return string Error layout name */ public function getErrorLayout() { return $this->error_layout . 'Layout'; }
/** * Return current router name * @return string */ public function getRouteName() { return $this->route_name; }
/** * @param null|string $name * @return Route * @throws \ErrorException */ public function getRoute($name = null) { if (is_null($name)) { return $this->route; } else { if ($this->routeIsExists($name)) { return $this->getRouteByName($name); } else { throw new \ErrorException('Unknown route name: "' . $name . '".'); } } }
/** * @param string $name * @return bool */ public function routeIsExists($name) { return array_key_exists($name, $this->routes); }
/** * @param string $name * @return Route */ protected function getRouteByName($name) { return $this->routes[$name]; } }
|