контроллер представления модели — PHP MVC Namespacing and Aliasing

Я пытаюсь лучше изучить PHP, работая над своей пользовательской средой (в целях обучения), и мне было интересно, как я могу реализовать пространства имен с псевдонимами (они являются новыми для меня). Моя «каркасная» структура выглядит так:

app/
controllers/
core/
functions/
languages/
models/
vendor/
views/
.htaccess
composer.json
composer.lock
config.php
database.php
filters.php
index.php
init.php
routes.php
style/
upload/
.htaccess
index.php
robots.txt

В папке app / core у меня есть файлы:

App.php
Controller.php
Filter.php
Functions.php
Language.php
Route.php
index.php

И мой файл init.php выглядит так:

<?php
require "vendor/autoload.php";
require "database.php";
require "core/App.php";
require "core/Filter.php";
require "core/Route.php";
require "functions/Common.php";
require "functions/Validator.php";
require "functions/Custom.php";
require "core/Language.php";
require "core/Functions.php";
require "core/Controller.php";

Файлы из controllers / folder расширяют Controller.php, а core / Functions.php расширяет core / Custom.php, который расширяет core / Common.php
Как я могу реализовать пространство имен и псевдонимы, чтобы упростить поддержку своей инфраструктуры и не нужно загружать каждый класс полным пространством имен? заранее спасибо

редактировать:
Хорошо, я создал файл controller.php в app / controllers / с этим кодом

<?php
use App\Core\Controller as BaseController;

class Controller extends BaseController {

}

И в моем App.php я добавил следующую функцию:

    private function applyAliases() {
foreach(self::$config['aliases'] as $file => $alias) {
class_alias($file, $alias);
}
}

Итак, в моем файле config.php я добавил:

/* Aliases */
"aliases" => [
"App\Core\Language" => "Language",
"App\Core\Filter" => "Filter",
"App\Core\Route" => "Route"]

Также в Functions.php при загрузке функций я добавил еще один class_alias:

public function loadFunction(string $file) {
if(!file_exists(App::$config['paths']['functions'].$file.".php")) {
throw new Exception("File ".App::$config['paths']['functions'].$file.".php doesn't exists");
}

require App::$config['paths']['functions'].$file.".php";

class_alias("App\Functions\\".$file, $file);

return new $file();
}

Будет ли это правильный путь?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …