Files
dominik/public/system/config/engine/action.php
T
Konstantin 80e5820c47 Refactor engine structure: remove legacy files and introduce new architecture
- Deleted legacy model.php, proxy.php, registry.php, and router.php files.
- Added new action.php, controller.php, event.php, loader.php, model.php, proxy.php, registry.php, and router.php files to implement a more modular and maintainable structure.
- Introduced an event-driven architecture for better extensibility.
- Updated loader functionality to handle controllers, models, views, libraries, helpers, and configurations.
- Ensured compatibility with OpenCart standards and improved error handling.
- Created a new DDEV configuration file for streamlined development environment setup.
2026-06-12 11:14:59 +03:00

85 lines
1.9 KiB
PHP

<?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
*/
/**
* Action class
*/
class Action {
private $id;
private $route;
private $method = 'index';
/**
* Constructor
*
* @param string $route
*/
public function __construct($route) {
$this->id = $route;
$parts = explode('/', preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route));
// Break apart the route
while ($parts) {
$file = DIR_APPLICATION . 'controller/' . implode('/', $parts) . '.php';
if (is_file($file)) {
$this->route = implode('/', $parts);
break;
} else {
$this->method = array_pop($parts);
}
}
}
/**
*
*
* @return string
*
*/
public function getId() {
return $this->id;
}
/**
*
*
* @param object $registry
* @param array $args
*/
public function execute($registry, array $args = array()) {
// Stop any magical methods being called
if (substr($this->method, 0, 2) == '__') {
return new \Exception('Error: Calls to magic methods are not allowed!');
}
$file = DIR_APPLICATION . 'controller/' . $this->route . '.php';
$class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route);
// Initialize the class
if (is_file($file)) {
include_once(modification($file));
$controller = new $class($registry);
} else {
return new \Exception('Error: Could not call ' . $this->route . '/' . $this->method . '!');
}
$reflection = new ReflectionClass($class);
if ($reflection->hasMethod($this->method) && $reflection->getMethod($this->method)->getNumberOfRequiredParameters() <= count($args)) {
return call_user_func_array(array($controller, $this->method), $args);
} else {
return new \Exception('Error: Could not call ' . $this->route . '/' . $this->method . '!');
}
}
}