Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
В чем логика создания нового Middleware, если ту-же самую проверку я могу описать в контроллере?
Интересует вопрос в чем логика и удобство.
Хочу использовать Laravel осмысленно.
Не в сети
Для избежания дублирования кода (почитай про DRY принцип) и для повышения читаемости кода.
Не в сети
DRY говорит что функционал должен быть описан один раз.
Этот функционал я могу описать скажем в модели User и использовать его в контроллере. Например Auth::user()->isAdmin(). Разве это противоречит концепции DRY? Метод isAdmin() описан один раз, и используется когда необходимо. В чем выгода создавать вместо такого метода middleware?
Изменено Yurri_87 (30.08.2017 16:41:25)
Не в сети
Разве это противоречит концепции DRY?
Грубо говоря, паттерны, SOLID принципы и т.д. созданы для того, чтобы избегать повторения кода. Почитай про принцип Single Responsibility, который также служит принципу DRY. Если ты запихнешь эту логику в контроллер, то нарушишь SR.
В чем выгода создавать вместо такого метода middleware?
В том, что в будущем ты (или другой разработчик) захочешь добавить проверку еще в пару контроллеров. А потом появится контроллер, несколько методов которого должны будут работать не только для админа. Тогда и начинается геморрой.
Контроллер должен быть максимально простым и делать только то, что от него требуется (SR). Возьми за правило выносить всю логику, которая может быть вынесена, из контроллера в соответствующие классы.
Изменено AlexeyMezenin (30.08.2017 18:20:00)
Не в сети
я понимаю что это хорошая практика и я буду не прав если скажу что без разницы, где реализована логика.
Но мне нужно логически понять и разложить по полочкам, почему все так.
В случае, если метод контроллера должен использоваться не только админом, но и обычным юзером, то почему бы в этом методе не описать if($user->role() == 'admin'){...} else if($ser->role() == 'bastard'){...} в чем геморой непойму. А вообще - принцип единой ответственности не будет нарушен, если вместо большого метода сделать несколько маленьких, ведь разные роуты можно обрабатывать разными методами одного и того же контроллера. В чем тогда преимущество мидлвары? Ведь чтобы написать отдельную мидлвару, нужно потратить столько же усилий, сколько для того чтобы написать дополнительный метод.
Изменено Yurri_87 (30.08.2017 21:07:23)
Не в сети
С таким подходом у тебя простые контроллеры превратятся в простыни текста на тысячи строк. Такое приложение очень тяжело поддерживать, в некоторые нереально добавить какую-то простую фичу без переписывания огромной части кода.
Ты это все сам поймешь, когда поработаешь с приложением средних размеров.
А вообще - принцип единой ответственности не будет нарушен, если вместо большого метода сделать несколько маленьких
Будет. В задачи контроллера не входит проверка прав пользователя.
Изменено AlexeyMezenin (31.08.2017 16:51:47)
Не в сети
Страницы 1