diff options
Diffstat (limited to 'public/system/engine/router.php')
-rw-r--r-- | public/system/engine/router.php | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/public/system/engine/router.php b/public/system/engine/router.php new file mode 100644 index 0000000..650fb0d --- /dev/null +++ b/public/system/engine/router.php @@ -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; + } + } +}
\ No newline at end of file |