Организация index.php в проекте? При использовании стороннего роутера, проект в index.php начинается так:use Klein\Klein;
require_once __DIR__ . '/vendor/autoload.php';
$klein = new Klein();
$klein->respond('POST', '/packages', function (Request $request) {
$server = new Server();
return $server->serve($request->paramsPost()->all());
});
$klein->dispatch();
1. Нужно создать сессию даже для неавторизованного пользователя и загрузить некоторые настройки проекта. Где лучше это сделать? Корректно ли вызвать класс сразу после создания роутера:$klein = new Klein();
$session = new Session();
$settings = new Settings();
2. Нигде не проверяется сущеcтвование класса перед созданием. Может класса Server не существует. Будет ошибка. Можно ли сделать так:function checkClass($class){
if (class_exists($class)) {
return new $class;
} else {
...
}
}
$klein->respond('GET', '/[:controller]', function ($request) {
$obj = checkClass(ucfirst($request->controller).'Controller');
$act = $obj->runDefault();
return $act;
});
Здесь https://github.com/nahidex/Employee-Leave-Manageme... вообще зафигачили все классы сразу:use Klein\Klein as Route;
$bag = new Pimple\Container; // container
$route = new Route();
$home = new Home($bag); //controller
$dashboard = new Dashboard($bag); // controller
$user = new User();
$role = new Role();
$leave = new LeaveController($bag);
А если у меня их 30 штук и не все понадобятся, я так и должен портянку такую писать?

21 Авг 2019 в 06:59
168 +1
0
Ответы
1
Лучше создать сессию и загрузить настройки проекта до создания роутера. Это может быть сделано, например, в самом начале index.php, перед созданием экземпляров классов:session_start();
$session = new Session();
$settings = new Settings();
$klein = new Klein();Да, в вашем коде можно добавить проверку на существование класса перед созданием экземпляра. Однако, это может привести к повторяющемуся коду в каждом обработчике маршрута. Вместо этого можно использовать зависимость внедрения контейнера (DI Container), который будет автоматически создавать экземпляры классов в зависимости от их наличия. Например, вы можете использовать библиотеку Pimple, как показано в примере с Employee Leave Management.

Если у вас большое количество классов и не все из них используются в каждом запросе, DI Container может быть хорошим решением, чтобы избежать избыточного кода и упростить управление зависимостями.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир