Внедрить модели в конструкторы контроллеров laravel или конкретную функцию контроллера laravel

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

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

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

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

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

-1

Решение

Как правило, когда вы вводите модель в контроллере метод это означает, что вы пытаетесь привязать значение маршрута к модели. Проще говоря, вы хотите, чтобы 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)
}

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

Ура!

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector