Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 29.08.2017 18:10:41

Зачем нужны посредники, если есть контроллеры

В чем логика создания нового Middleware, если ту-же самую проверку я могу описать в контроллере?
Интересует вопрос в чем логика и удобство.
Хочу использовать Laravel осмысленно.

Не в сети

#2 29.08.2017 18:30:32

Re: Зачем нужны посредники, если есть контроллеры

Для избежания дублирования кода (почитай про DRY принцип) и для повышения читаемости кода.

Не в сети

#3 30.08.2017 16:22:28

Re: Зачем нужны посредники, если есть контроллеры

DRY говорит что функционал должен быть описан один раз.
Этот функционал я могу описать скажем в модели User и использовать его в контроллере. Например Auth::user()->isAdmin(). Разве это противоречит концепции DRY? Метод isAdmin() описан один раз, и используется когда необходимо. В чем выгода создавать вместо такого метода middleware?

Изменено Yurri_87 (30.08.2017 16:41:25)

Не в сети

#4 30.08.2017 18:10:17

Re: Зачем нужны посредники, если есть контроллеры

Разве это противоречит концепции DRY?

Грубо говоря, паттерны, SOLID принципы и т.д. созданы для того, чтобы избегать повторения кода. Почитай про принцип Single Responsibility, который также служит принципу DRY. Если ты запихнешь эту логику в контроллер, то нарушишь SR.

В чем выгода создавать вместо такого метода middleware?

В том, что в будущем ты (или другой разработчик) захочешь добавить проверку еще в пару контроллеров. А потом появится контроллер, несколько методов которого должны будут работать не только для админа. Тогда и начинается геморрой.

Контроллер должен быть максимально простым и делать только то, что от него требуется (SR). Возьми за правило выносить всю логику, которая может быть вынесена, из контроллера в соответствующие классы.

Изменено AlexeyMezenin (30.08.2017 18:20:00)

Не в сети

#5 30.08.2017 21:02:04

Re: Зачем нужны посредники, если есть контроллеры

я понимаю что это хорошая практика и я буду не прав если скажу что без разницы, где реализована логика.
Но мне нужно логически понять и разложить по полочкам, почему все так.
В случае, если метод контроллера должен использоваться не только админом, но и обычным юзером, то почему бы в этом методе не описать if($user->role() == 'admin'){...} else if($ser->role() == 'bastard'){...} в чем геморой непойму. А вообще - принцип единой ответственности не будет нарушен, если вместо большого метода сделать несколько маленьких, ведь разные роуты можно обрабатывать разными методами одного и того же контроллера. В чем тогда преимущество мидлвары? Ведь чтобы написать отдельную мидлвару, нужно потратить столько же усилий, сколько для того чтобы написать дополнительный метод.

Изменено Yurri_87 (30.08.2017 21:07:23)

Не в сети

#6 31.08.2017 07:58:03

Re: Зачем нужны посредники, если есть контроллеры

С таким подходом у тебя простые контроллеры превратятся в простыни текста на тысячи строк. Такое приложение очень тяжело поддерживать, в некоторые нереально добавить какую-то простую фичу без переписывания огромной части кода.

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

А вообще - принцип единой ответственности не будет нарушен, если вместо большого метода сделать несколько маленьких

Будет. В задачи контроллера не входит проверка прав пользователя.

Изменено AlexeyMezenin (31.08.2017 16:51:47)

Не в сети

Подвал раздела