ecom
E-commerce cms
 All Data Structures Namespaces Files Functions Variables
Public Member Functions | Private Member Functions | Private Attributes
Router Class Reference

Public Member Functions

 __construct ($server, $context)
 
 init ($server)
 
 serveUrl ()
 
 routeAdd ($route, $controller)
 
 overrideUrl ($type, $value)
 
 __get ($key)
 

Private Member Functions

 createController ($className, $params)
 
 routeMatch ($request, $route)
 
 prepareUrl ()
 
 doRouteAdd ($route, $controller)
 

Private Attributes

 $rootPath
 
 $rootUrl
 
 $requestUrl
 
 $routes
 
 $context
 
 $routeParams
 
 $overridden
 

Detailed Description

Will manager new connections to the server and try to match the requests and the controllers

Definition at line 9 of file Router.php.

Constructor & Destructor Documentation

__construct (   $server,
  $context 
)

Create the router, initialize url and path

Definition at line 82 of file Router.php.

83  {
84  $pos = strrpos($server["SCRIPT_NAME"], "/");
85  $relativePath = (($pos === FALSE) ? "" : substr($server["SCRIPT_NAME"], 0, $pos));
86  $this->rootPath = $server["DOCUMENT_ROOT"] . $relativePath . "/";
87  $this->rootUrl = $server["REQUEST_SCHEME"] . "://" . $server["HTTP_HOST"] . $relativePath ."/";
88  $this->requestUrl = substr($server["REQUEST_URI"], count($this->rootUrl) -1);
89  $this->context = $context;
90  $this->routes = array();
91  $this->overridden = null;
92  }

Member Function Documentation

__get (   $key)

Getter

Definition at line 246 of file Router.php.

247  {
248  if (isset($this->overridden) && in_array($key, array("modulesPath")))
249  return $this->overridden[$key];
250  switch ($key)
251  {
252  case "rootPath": return $this->rootPath; break;
253  case "rootUrl": return $this->rootUrl; break;
254  case "modulesPath": return $this->rootPath."content/modules/"; break;
255  case "modulesUrl": return $this->rootUrl."content/modules/"; break;
256  case "themesPath": return $this->rootPath."content/theme/"; break;
257  case "themesUrl": return $this->rootUrl."content/theme/"; break;
258  }
259  throw new \Exception("Cannot access attribute {$key}");
260  }
createController (   $className,
  $params 
)
private

Create and return Controller for the given route

Parameters
$className
array$routeParameters
Returns
on succes, false otherwise

Definition at line 142 of file Router.php.

143  {
144  if (!class_exists($className))
145  return false;
146  $this->routeParams = $params;
147  $result = null;
148  try
149  {
150  $result = new $className($this->context, $params);
151  if (!($result instanceof \Tools\AController))
152  return false;
153  }
154  catch (\Exception\Error404 $e)
155  {
156  return false;
157  }
158  return $result;
159  }
doRouteAdd (   $route,
  $controller 
)
private

Add a route to the internal route list Internal procedure

Definition at line 205 of file Router.php.

206  {
207  $this->routes[] = array($route, $controller);
208  }
init (   $server)

Called after database initialization Check the site url and redirect user if the HOST does not match If the site url is not defined in database, do not redirect

Definition at line 99 of file Router.php.

100  {
101  $siteUrl = \Entity\Config::getConfig(null, "siteUrl");
102  // @codeCoverageIgnoreStart
103  // This code is tested under another process
104  if ($siteUrl != $server["HTTP_HOST"] && $siteUrl !== null)
105  {
106  header("location: http://{$siteUrl}{$server['REQUEST_URI']}");
107  die;
108  }
109  // @codeCoverageIgnoreEnd
110  }
static getConfig($lang=null, $key=null, $defaultValue=null)
Definition: Config.php:43
overrideUrl (   $type,
  $value 
)

Override url This SHOULD not be called for security purpose

Parameters
string$typethe url type to override
string$valuethe new value Will fail if called from a controller
Returns
boolean false on failure

Definition at line 235 of file Router.php.

236  {
237  if (!$this->context->isTestingEnvironment())
238  return false;
239  $this->overridden[$type] = $value;
240  return true;
241  }
prepareUrl ( )
private

Append local routes to router Will load CMS pages, categories page, products page, cart pages, etc.

Definition at line 193 of file Router.php.

194  {
195  $fetcher = new \Entity\Cms();
196  $pages = $fetcher->selects(null, array("order"));
197  foreach ($pages as $i)
198  $this->doRouteAdd($i->shurl, $i->controller);
199  }
doRouteAdd($route, $controller)
Definition: Router.php:205
routeAdd (   $route,
  $controller 
)
Parameters
string$routeUri to match the controller Uri can be formatted as '/:param/static'. expl. '/product/:id/'
string$controllerController class name. new $controller() MUST return a instance

Add a route and a Controller to the list Can only be called from `routerSetup' hook

Definition at line 220 of file Router.php.

221  {
222  if (!$this->context->hookManager->isInHook("routerSetup"))
223  throw new \Exception("You can only add routes from `routerSetup' hook");
224  $this->doRouteAdd($route, $controller);
225  }
doRouteAdd($route, $controller)
Definition: Router.php:205
routeMatch (   $request,
  $route 
)
private

Check if the request match route

Parameters
array$requestUser request
array$routeRoute to check
Returns
array on success, false on failure

Definition at line 167 of file Router.php.

168  {
169  $i = count($request);
170  $params = array();
171  if ($i != count($route))
172  return false;
173  while ($i)
174  {
175  $i--;
176  if ($route[$i] == '' && $request[$i] == '')
177  continue;
178  if ($route[$i] == '' || $request[$i] == '')
179  return false;
180  if ($route[$i][0] != ':' && ($route[$i] != $request[$i]))
181  return false;
182  if ($route[$i][0] == ':')
183  $params[$route[$i]] = $request[$i];
184  $params[$i -1] = $request[$i];
185  }
186  return array_reverse($params);
187  }
serveUrl ( )
Returns
controller /core/controller/AController.php Match request to a controller return FALSE on failure (eg. 404)

Definition at line 118 of file Router.php.

119  {
120  //TODO trigger hook GET, POST
121  $this->prepareUrl();
122  $requestParams = explode("/", $this->requestUrl);
123  foreach ($this->routes as $i)
124  {
125  $routeParams = explode("/", $i[0]);
126  $p = $this->routeMatch($requestParams, $routeParams);
127  if ($p === false)
128  continue;
129  $controller = $this->createController($i[1], $p);
130  if ($controller)
131  return $controller;
132  }
133  return false;
134  }
createController($className, $params)
Definition: Router.php:142
routeMatch($request, $route)
Definition: Router.php:167

Field Documentation

Tools Context $context
private

/core/tools/Context.php Contains website's informations

Definition at line 41 of file Router.php.

array $overridden
private

contains url and paths to rewrite

Definition at line 57 of file Router.php.

string $requestUrl
private

Contains request

Definition at line 29 of file Router.php.

string $rootPath
private

Contains the application's root path (ex: http://myshop.com/) with trailing slash Can be accessed read-only via $instance->rootPath

Contains the application's root path (ex: /srv/http/myshop/) with trailing slash Can be accessed read-only via $instance->rootUrl

Definition at line 16 of file Router.php.

$rootUrl
private

Definition at line 23 of file Router.php.

$routeParams
private

Definition at line 51 of file Router.php.

$routes
private

Definition at line 34 of file Router.php.


The documentation for this class was generated from the following file: