diff options
Diffstat (limited to '')
-rw-r--r-- | web/core/loader.php | 79 |
1 files changed, 71 insertions, 8 deletions
diff --git a/web/core/loader.php b/web/core/loader.php index 4d4526c..2091533 100644 --- a/web/core/loader.php +++ b/web/core/loader.php @@ -1,16 +1,79 @@ <?php /* Copyright (c) 2024 Freya Murphy */ class Loader { + // keep track of what has been loaded + private $loaded; + + function __construct() { + $this->loaded = array(); + } + + /** + * Loads a $type of object from a $dir with a given $name + * @param string $name - the name of the object to load + * @param string $dir - the directory theese objects are stored in + * @param string $type - the type of the object + */ + private function load_type($name, $dir, $type): object|NULL { + $path = $dir . '/' . $name . '.php'; + if (array_key_exists($path, $this->loaded)) { + return $this->loaded[$path]; + } + + if (!file_exists($path)) { + return NULL; + } + + $parts = explode('/', $name); + $part = end($parts); + $class = ucfirst($part) . '_' . $type; + require($path); + + $ref = NULL; + try { + $ref = new ReflectionClass($class); + } catch (Exception $_e) {} + + if ($ref === NULL) { + return NULL; + } + + $obj = $ref->newInstance($this); + $this->loaded[$path] = $obj; + + return $obj; + } + + /** + * Loads a model + * @param string $name - the name of the model to load + */ + public function model($name): object|NULL { + $root = $GLOBALS['webroot']; + $dir = $root . '/_model'; + return $this->load_type($name, $dir, 'model'); + } + + /** + * Loads a controller + * @param string $name - the name of the controller to load + */ + public function controller($name): Controller|NULL { + $root = $GLOBALS['webroot']; + $dir = $root . '/_controller'; + return $this->load_type($name, $dir, 'controller'); + } + /** * Loads the given common lang - * @param lang_code - the language code + * @param string $lang_code 0 the language code */ - public function lang($lang_code) { + public function lang($lang_code): void { $dir = $GLOBALS['webroot'] . '/lang/' . $lang_code . '/'; $lang = $GLOBALS['lang']; if ($handle = opendir($dir)) { while (false !== ($entry = readdir($handle))) { - if ($entry === '.' || $entry === '..' || $entry === 'routes') { + if ($entry === '.' || $entry === '..' || $entry === 'apps') { continue; } $path = $dir . $entry; @@ -21,12 +84,12 @@ class Loader { } /** - * Loads a given route specific lang - * @param lang_coed - the language code - * #param name - the name of the route + * Loads a given app specific lang + * @param string $lang_code - the language code + * @param string $name - the name of the app */ - public function route_lang($lang_code, $name) { - $dir = $GLOBALS['webroot'] . '/lang/' . $lang_code . '/routes/'; + public function app_lang($lang_code, $name): void { + $dir = $GLOBALS['webroot'] . '/lang/' . $lang_code . '/apps/'; $file = $dir . $name . '.php'; if (file_exists($file)) { $lang = $GLOBALS['lang']; |