first commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
/**
|
||||
* @package OpenCart
|
||||
* @author Daniel Kerr
|
||||
* @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/)
|
||||
* @license https://opensource.org/licenses/GPL-3.0
|
||||
* @link https://www.opencart.com
|
||||
*/
|
||||
|
||||
/**
|
||||
* Router class
|
||||
*/
|
||||
final class Router {
|
||||
private $registry;
|
||||
private $pre_action = array();
|
||||
private $error;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param object $route
|
||||
*/
|
||||
public function __construct($registry) {
|
||||
$this->registry = $registry;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param object $pre_action
|
||||
*/
|
||||
public function addPreAction(Action $pre_action) {
|
||||
$this->pre_action[] = $pre_action;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param object $action
|
||||
* @param object $error
|
||||
*/
|
||||
public function dispatch(Action $action, Action $error) {
|
||||
$this->error = $error;
|
||||
|
||||
foreach ($this->pre_action as $pre_action) {
|
||||
$result = $this->execute($pre_action);
|
||||
|
||||
if ($result instanceof Action) {
|
||||
$action = $result;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
while ($action instanceof Action) {
|
||||
$action = $this->execute($action);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param object $action
|
||||
* @return object
|
||||
*/
|
||||
private function execute(Action $action) {
|
||||
$result = $action->execute($this->registry);
|
||||
|
||||
if ($result instanceof Action) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
if ($result instanceof Exception) {
|
||||
$action = $this->error;
|
||||
|
||||
$this->error = null;
|
||||
|
||||
return $action;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user