Я застрял при внедрении зависимостей между контроллерами-сервисами, сервис-базой данных, я чувствую, что это беспорядок.
Все запросы перенаправляются в index.php из public_html, там
В index.php из public_html я создаю объект приложения, обслуживаю его маршрутизатором и настраиваю некоторые маршрутынапример:
$app = new Application(new Router());
$app->addRoute('/questions', (Object)[
'controller' => 'QuestionsController',
'action' => 'getAllQuestions'
]);
Я сопоставляю URI с маршрутами регулярного выражения и как-то «динамически» создаю экземпляр контроллера в зависимости от маршрута внутри Application.php, который отображается на контроллер, и действия:
if(class_exists($this->controllerNamespace)){
$this->router->setController(new $this->controllerNamespace);
call_user_func_array([$this->router->getController(), $this->router->getAction()], [$this->router->getParams()]);
}
Внутри контроллера я бы создавал экземпляр объекта Service и вызывал метод для получения результатов db.
Службе, в свою очередь, нужен объект базы данных для взаимодействия с базой данных и моей базой данных.Я полагаю, что класс - это что-то вроде синглтона:
static function getInstance():Database
{
if (NULL == self::$database) {
self::$database = new Database();
}
return self::$database;
}
, поэтому я не знаю, какой сервис нужен контроллеру, пока я на самом деле не нахожусь внутри контроллера, а база данных, созданная внутри класса сервиса, просто кажется неправильной, какя могу улучшить все это?
Я предпочитаю без других библиотек контроллер ввода зависимостей или другие вещи, которые облегчают задачу, я пишу это как учебное упражнение, чтобы лучше понять его.
app
src
Controllers
Questions
Answers
Core
Controller
Database
Router
Service
View
Services
Questions
Answers
Views
index.php
Application.php
Config.php
tests
vendor
logs
public_html
assets
index.php
.htaccess