Back to Opencart

File system\engine\action.php

docs/api/source-system.engine.action.html

4.1.0.35.2 KB
Original Source

Namespaces

Classes

| 1: | <?php | | 2: | /** | | 3: | * @package OpenCart | | 4: | * | | 5: | * @author Daniel Kerr | | 6: | * @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/) | | 7: | * @license https://opensource.org/licenses/GPL-3.0 | | 8: | * | | 9: | * @see https://www.opencart.com | | 10: | */ | | 11: | namespace Opencart\System\Engine; | | 12: | /** | | 13: | * Class Action | | 14: | * | | 15: | * @package Opencart\System\Engine | | 16: | */ | | 17: | class Action { | | 18: | /** | | 19: | * @var string | | 20: | */ | | 21: | private string $route; | | 22: | | | 23: | /** | | 24: | * @var string | | 25: | */ | | 26: | private string $method; | | 27: | | | 28: | /** | | 29: | * Constructor | | 30: | * | | 31: | * @param string $route | | 32: | */ | | 33: | public function __construct(string $route) { | | 34: | $route = preg_replace('/[^a-zA-Z0-9_|/.]/', '', $route); | | 35: | | | 36: | $pos = strrpos($route, '.'); | | 37: | | | 38: | if ($pos !== false) { | | 39: | $this->route = substr($route, 0, $pos); | | 40: | $this->method = substr($route, $pos + 1); | | 41: | } else { | | 42: | $this->route = $route; | | 43: | $this->method = 'index'; | | 44: | } | | 45: | } | | 46: | | | 47: | /** | | 48: | * getId | | 49: | * | | 50: | * @return string | | 51: | */ | | 52: | public function getId(): string { | | 53: | return $this->route; | | 54: | } | | 55: | | | 56: | /** | | 57: | * Execute | | 58: | * | | 59: | * @param \Opencart\System\Engine\Registry $registry | | 60: | * @param array<mixed> $args | | 61: | * | | 62: | * @return mixed | | 63: | */ | | 64: | public function execute(\Opencart\System\Engine\Registry $registry, array &$args = []) { | | 65: | // Stop any magical methods being called | | 66: | if (substr($this->method, 0, 2) == '__') { | | 67: | return new \Exception('Error: Calls to magic methods are not allowed!'); | | 68: | } | | 69: | | | 70: | // Create a key to store the controller object | | 71: | $key = 'controller_' . str_replace('/', '_', $this->route); | | 72: | | | 73: | if (!$registry->has($key)) { | | 74: | // Initialize the class | | 75: | $controller = $registry->get('factory')->controller($this->route); | | 76: | | | 77: | // Store object | | 78: | $registry->set($key, $controller); | | 79: | } else { | | 80: | $controller = $registry->get($key); | | 81: | } | | 82: | | | 83: | // If action cannot be executed, we return an action error object. | | 84: | if ($controller instanceof \Exception) { | | 85: | return new \Exception('Error: Could not call route ' . $this->route . '!'); | | 86: | } | | 87: | | | 88: | $callable = [$controller, $this->method]; | | 89: | | | 90: | if (is_callable($callable)) { | | 91: | return $callable(...$args); | | 92: | } else { | | 93: | return new \Exception('Error: Could not call route ' . $this->route . '!'); | | 94: | } | | 95: | } | | 96: | } | | 97: | |

OpenCart API API documentation generated by ApiGen dev-master