2017-01-25 5 views
1

Я смущен о том, почему нам нужен конструктор и может кто-нибудь объяснить мне об этом коде от моего контроллера:конструкта в PHP Laravel не так ясно мне

public function __construct(MerchantService $merchantService, PaymentService $paymentService){ 
    $this->merchantService = $merchantService; 
    $this->paymentService = $paymentService; 
} 

Я работаю на панели администратора с ларавел. и наш босс хочет stucture быть похожим на это:

контроллер -> Сервис -> хранилище -> модальный -> база данных

это довольно прямо вперед, когда я иду по этому пути:

контроллер -> модальный -> база данных.

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

в вышеуказанном коде есть 2 услуги, MerchantService и PaymentService. но я не понимаю, что именно делает конструктор с переменной и переменной оплаты Merchant service в качестве параметров, является ли она инициированием объекта Merchant service и PaymentService ??

ответ

1

Сервисный контейнер Laravel - это мощный инструмент для управления зависимостями классов и выполнения инъекции зависимостей. Инъекционная инъекция - это причудливая фраза, которая по существу означает это: зависимости классов «вводятся» в класс через конструктор или, в некоторых случаях, методы «setter».

public function __construct(UserRepository $users) 
{ 
    $this->users = $users; 
} 

В этом примере UserController необходимо получать пользователей из источника данных. Таким образом, мы вводим службу, которая может извлекать пользователей. В этом контексте наш UserRepository скорее всего использует Eloquent для извлечения информации о пользователе из базы данных. Однако, поскольку репозиторий вводится, мы можем легко заменить его другой реализацией. Мы также можем легко «высмеять» или создать фиктивную реализацию UserRepository при тестировании нашего приложения.

https://laravel.com/docs/5.3/container

+0

thx Алексей Мезенин. Можете ли вы объяснить мне немного, если я хочу сделать это для входа пользователя: UserLoginController -> LoginService -> LoginReposity. – Mikethetechy

+0

@MohamedManas Я бы рекомендовал использовать [Laravel встроенный auth scaffold] (https://laravel.com/docs/5.3/authentication#introduction). Вам не нужно создавать репозиторий или службу для этого. –

+0

Да, ваше право, со встроенным Auth, весь процесс становится намного проще, я сделал это так в начале .. но они хотят, чтобы я прошел через эту структуру: (.. UserLoginController -> LoginService -> Loginrepository - > DB. Вот почему im stuck – Mikethetechy

0

Это шаблон дизайна, он называется depedency injection.
Это хороший способ работать, поэтому вы можете легко писать тесты или изменять службы и многое другое.

Вы можете узнать больше о dependecy injectionhere on SO itself, или here on wikipedia.

+0

ТНХ для информации ... ссылка идет о хранилище от контроллера ... им до сих пор путают .. как, например, если у меня есть UserLoginController и мне нужно сделать это: UserLoginController-> LoginService-> LoginRepository-> покадрово. после modal я получаю его просто посылку данных в базу данных .. но как я могу сделать это с UserLoginController до LoginRepository? извините за невежество ... – Mikethetechy