Внедрить модели в конструкторы контроллеров laravel или конкретную функцию контроллера laravel - PullRequest
0 голосов
/ 19 декабря 2018

Представьте себе ситуацию, когда в конструкторе laravels (PostController) мне нужно ввести 3 модели: User, Post и Comment.

У меня есть два сценария:

1) Внедрить все эти 3 модели в конструктор контроллеров, а затем я использую переменные этого контроллера в конкретных функциях, таких как: $this->post

2) Внедряйте эти модели в функции конкретного контроллера всякий раз, когда это необходимо (например, index(Post $post));

, какая из этих двух моделей является лучшей практикой?В первом сценарии в индексной функции я использую только переменную $this->post, но я также создаю $this->comment и $this->user, потому что они нужны мне в других функциях?но они мне не нужны в индексе, поэтому я внедряю и создаю их даром всякий раз, когда вызываю индекс, обращаясь к конкретному маршруту индекса.Разве это не плохо?так какой из них лучше?

1 Ответ

0 голосов
/ 19 декабря 2018

Обычно, когда вы вводите модель в методе контроллера , это означает, что вы пытаетесь привязать значение маршрута к модели.Проще говоря, вы хотите, чтобы laravel автоматически волшебно выбрал эту модель для вас.

С другой стороны, когда вы вводите ее через __construct(), вы хотите, чтобы эти моделибыть создан для вашего использования в классе.Проще говоря, вы хотите, чтобы Laravel создал новый экземпляр этой модели в классе.

Давайте пойдем на практике:

Первая ситуация

//routes

Route::get('/ninjas/{ninja}') //ninja is a number or anything that identifies a model

//Controller

public function index(Ninja $ninja)
{        
    //$ninja will be a resolved model
}

Другая ситуация,

public function __construct(Ninja $ninja)
{        
    $this->ninja = $ninja;
}

public function index($ninja_id)
{        
    $this->ninja->find($ninja_id)
}

Как видно из приведенных выше примеров, это зависит от варианта использования.То есть, если вы намереваетесь затем связать модель с маршрутом, вы вводите в методы контроллера иначе, если хотите, чтобы ваши модели использовались cleaner тогда, вплоть до конструктора.

Приветствия!

PS: примечание, запрашивающее наилучшую практику , обычно привлекает взвешенный ответ, что затрудняет поиск правильного ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...