Внедрение зависимостей PHP-контейнеры и построение инъекций

У меня простой вопрос.

class controller{

  $model;
  $view;
  $db;
  $array;

  public function __construct(Model $model, View $view, Database $db, Input $array){
    $this->model = $model;
    $this->view = $view;
    $this->db= $db;
    $this->array = $array;   
  }

  public function giveToModel{

    $this->model->someFunction($this->view, $this->db , $this->array);

  }

}

Теперь я как бы новичок в программировании, поэтому у меня есть несколько вопросов. Чтобы придерживаться определенных принципов в кодировании, таких как SOLID и т. д., DI является обязательным. Однако я немного не понимаю, как реализовать это в среде MVC. Мне просто нужны указатели.

Что касается кода выше. Я действительно не уверен, что это за инъекция. Есть ли необходимость вводить все это через конструктор. или я должен ввести некоторые из них (View $ view, Database $ db, Input $ array) через функцию "giveToModel".

И еще один. Могу ли я сделать два контейнера, например, вот так:

class controllerDepen {

  public function loadModel($name){
    return new $name.'Model';
  }

  public function postArray(){
    return new $postData; //object that gathers all the $_POST data into one array
  }

}

И еще один, чтобы обрабатывать зависимости для модели, а затем передавать их и использовать их для установки зависимостей.

Мои основные проблемы:

  1. хочу, чтобы в какой-то момент у меня было слишком много зависимостей, чтобы нормально пройти через __construct
  2. Разделение классов

Я знаю, что для подобных вещей существуют DIC, однако я бы очень хотел получить представление об этом предмете, прежде чем использовать их.

Как видите, мне могут потребоваться дополнительные пояснения по этой теме.

Общее правило заключается в том, что если экземпляр класса не будет работать без определенной зависимости, эту зависимость следует внедрить через конструктор. Если экземпляр класса может использоваться без зависимости, но может использовать ее в своих интересах, то его можно внедрить через конструктор (со значением по умолчанию = null) или через метод установки после построения. В этом случае это вопрос суждения, какой из них приемлем, с такими факторами, как «Можно ли, чтобы зависимый экземпляр был заменен другим экземпляром в течение жизненного цикла потребляющего класса?» помогая сообщить решение)

GordonM 19.07.2018 12:13

хорошо, я понял. Передайте через конструктор только то, что вам необходимо. Затем, чтобы добавить к этому вопросу. если я работаю в рамках MVC, нужно ли мне создать экземпляр представления в классе начальной загрузки, а затем передать его модели через контроллер или создать его в контроллере и отправить в модель?

BlackBit 19.07.2018 13:02

В этом конкретном случае я подозреваю, что контроллер диктует, какой вид необходим? В этом случае лучше всего настроить фабрику в контейнере DI (Auryn поддерживает это, и я подозреваю, что и большинство других фреймворков DI), которая определяет конкретный контроллер и создает его с правильным представлением. В этом случае могут быть актуальны и функции delegate (), и prepare (). github.com/rdlowrey/auryn#instantiation-delegates

GordonM 19.07.2018 13:47

Хм. он идет bootstrap (взорвать $ url call right controller) -> controller-> model-> view. однако, если я должен придерживаться концепции DI, я должен предоставить модели экземпляр вида "извне". так что я создаю представление в начальной загрузке, а затем отправляю его контроллеру, а затем моделирую или я реализую контейнер в контроллере, который «создает» экземпляр, а затем отправляет его оттуда. вот что меня смущает

BlackBit 19.07.2018 13:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
4
52
0

Другие вопросы по теме