Организация 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
137 +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 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир