Как не нарушать SOLID? Роутер работает так :[ 'pattern' => '~^/news/([a-zA-Z0-9\-]+)$~', 'class' => 'vendor\app\Frontend\Controllers\News', 'method' => 'getSingle', 'params' => ['news_url'], ], Имеем класс, метод и параметр. Далее Controller Resolver создает объект контроллера и пошло поехало. В контроллере соответственно есть зависимости, самая банальная - модель. Если правильно зависеть от абстракций а не от конкретных классов(не создавать объекты в конструкторе),будет ли правильным передавать зависимости в роутинге, к примеру как то так:[ 'pattern' => '~^/news/([a-zA-Z0-9\-]+)$~', 'class' => 'vendor\app\Frontend\Controllers\News', 'method' => 'getSingle', 'someDependencies'=>['vendor\app\Frontend\Models\News', 'vendor\app\Common\AccessControl'], 'params' => ['news_url'], ], Или есть более адекватный выход?
Передача зависимостей через роутинг не является хорошей практикой с точки зрения принципов SOLID. Вместо этого лучше всего использовать Dependency Injection Container (DIC) для управления зависимостями и их инъекции в конструктор класса контроллера. DIC позволяет легко управлять зависимостями, обеспечивая разделение ответственностей и уменьшая связанность компонентов.
Примерно такой код может выглядеть с использованием DIC:
Таким образом, мы используем DIC для создания объектов зависимостей и их инъекции в контроллер, обеспечивая легкость управления зависимостями и соблюдение принципов SOLID, особенно принципа Dependency Inversion.
Передача зависимостей через роутинг не является хорошей практикой с точки зрения принципов SOLID. Вместо этого лучше всего использовать Dependency Injection Container (DIC) для управления зависимостями и их инъекции в конструктор класса контроллера. DIC позволяет легко управлять зависимостями, обеспечивая разделение ответственностей и уменьшая связанность компонентов.
Примерно такой код может выглядеть с использованием DIC:
$container = new Container();$container['newsModel'] = function($container) {
return new vendor\app\Frontend\Models\News();
};
$container['accessControl'] = function($container) {
return new vendor\app\Common\AccessControl();
};
$container['controller'] = function($container) {
return new vendor\app\Frontend\Controllers\News($container['newsModel'], $container['accessControl']);
};
$router->addRoute('~^/news/([a-zA-Z0-9\-]+)$~', [
'class' => $container['controller'],
'method' => 'getSingle',
'params' => ['news_url'],
]);
Таким образом, мы используем DIC для создания объектов зависимостей и их инъекции в контроллер, обеспечивая легкость управления зависимостями и соблюдение принципов SOLID, особенно принципа Dependency Inversion.