Задать вопрос
@vlad3144

Как правильно использовать middleware в Laravel?

Почему-то сложилось такое мнение, на основе просмотренных видео материалов и примеров из интернета, что middleware используют только для проверки аутентификации и авторизации пользователей.
Есть ли, например, смысл использовать middlaware для проверки валидности данных передаваемых из формы в контроллер?
Помогите, пожалуйста, разобраться.
  • Вопрос задан
  • 1273 просмотра
Подписаться 2 Простой 2 комментария
Решения вопроса 1
@jazzus
Валидация полей форм
Создаешь форму.
Создаешь Реквест файл.
Прописываешь там правила и сообщения.
Подключаешь в контроллере, в метод куда идет пост-запрос и данный файл будет валидировать поля.
Middleware не валидирует поля. Используют, чтобы фильтровать запросы. Например, разрешить доступ к определенным роутам только пользователям, которые отвечают условиям. Плюс провести действия в процессе проверки. Например, заблокированных разлогинить и редирекнуть на главную.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@grinat
Нет. Хз в ларавел, но если там mvc, то данные запроса обратываются в контроллере, а middlaware там будет тем что стоит перед твоей обработкой в контролере. То есть например авторизация, мы в middlaware проверяем авторизован ли пользователь, если да, то передаем данные дальше на обработку в контролер. На практике их есть смысл заюзать если например пришел аналитик и сказал что если мы обрабатываем овощ, то надо выводить человеку сообщение: ты помидор, а у тебя куча контролер: картофанконтрлер, капустаконтролер, луккнотролер и т.п., и ты вместо того чтобы в них все вставлять сообщение ты помидор, добавляешь middlaware и в нем смотришь овощ ли это, и если да, то выводишь сообщение ты помидор.
Ответ написан
Комментировать
@javanub
Для валидации полей, есть валидатор

public function store(Request $request, StoreBlogTag $store)
{
$validate = Validator::make($request->all(), $store->rules(), $store->messages());
if ($validate->fails()) {
return redirect('post/create')
->withErrors($validate)
->withInput();
};
$tag = Tag::firstOrCreate([
'title' => $request->input('title'),
'slug' => Str::slug($request->input('title'), '-'),
]);
$tag->save();
return redirect()->back();
}
Ответ написан
Dase23
@Dase23
back-end developer
Прекратите раздувать контроллеры, пусть они выполняют свои прямые функции, логику пишите в сервис классах, валидацию пишите в реквестах, посредники нэможно использовать не только для авторизации, по best practice в ларавель, их используют для работы с входящими http запросами, проверка токенов, добавление и проверки специальных заголовков, редиректы, логгирование, cors, итд итп, то есть вся логика приложения которая должна отработать до выполнения бизнес логики
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы