Advertisement
  1. Code
  2. Laravel 5

Понимание основ middleware Laravel

Scroll to top
Read Time: 6 min

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

В этой статье мы погрузимся глубоко внутрь Laravel, чтобы понять концепцию middleware. Первая половина статьи начинается с введения в middleware и для чего оно фактически используется.

По мере продвижения мы рассмотрим, как создать middleware в приложении Laravel. После создания вашего middleware мы рассмотрим доступные опции для регистрации в Laravel, чтобы его можно было фактически вызвать во время обработки запросов.

Я надеюсь, что вы считаете себя знакомым с основными концепциями Laravel и инструментом командной строки Artisan для генерации кода. Разумеется, рабочая установка последнего приложения Laravel позволяет сразу же запустить примеры, приведенные в этой статье.

Что такое middleware в Laravel?

Мы могли бы подумать о middleware как о механизме, позволяющем подключиться к типичному потоку обработки запросов приложения Laravel. Типичная обработка маршрута Laravel проходит через определенные этапы обработки запроса, а middleware - один из тех уровней, которым приложение должно пройти.

Итак, какова именно точка подключения к потоку обработки запроса Laravel? Подумайте о чем-то, что требует выполнения на ранних этапах начальной загрузки приложения. Например, на ранних стадиях необходимо аутентифицировать пользователей, чтобы решить, разрешено ли им доступ к текущему маршруту.

Несколько вещей, которые я мог бы подумать о том, что вы могли бы достичь с помощью middleware:

  • логирование запросов
  • перенаправление пользователей
  • изменение / очистка входящих параметров
  • манипулирование ответом, созданным приложением Laravel
  • и многое другое

Фактически, приложение Laravel по умолчанию уже имеет пару важных компонентов middleware. Например, существует middleware, которое проверяет, находится ли сайт в режиме обслуживания. С другой стороны, существует middleware для очистки параметров запроса. Как я упоминал ранее, аутентификация пользователя также достигается самим middleware.

Я надеюсь, что объяснение пока поможет вам почувствовать себя более уверенно в терминах middleware. Если вы все еще смущены, не беспокойтесь об этом, так как мы собираемся создать middleware в следующем разделе, чтобы помочь вам точно понять, как можно использовать middleware в реальном мире.

Как создать middleware

В этом разделе мы создадим наше middleware. Но каково будет наше middleware?

Недавно я столкнулся с пользовательским требованием от моего клиента, что, если пользователи обращаются к сайту с любого мобильного устройства, они должны быть перенаправлены на соответствующий URL-адрес поддомена со всеми параметрами запроса. Я считаю, что это идеальный вариант использования, чтобы продемонстрировать, как middleware Laravel может использоваться в этом конкретном сценарии.

Причина, по которой мы хотели бы использовать middleware в этом случае, - это необходимость подключиться к потоку запросов приложения. В нашем middleware мы проверим агента пользователя и пользователи будут перенаправлены на соответствующий мобильный URL, если они используют мобильное устройство.

Обсудив всю эту теорию, давайте перейдем к коду, это лучший способ понять новую концепцию, не так ли?

Как разработчик Laravel, вы в конечном итоге используете команду artisan большую часть времени для генерации кода. Давайте используем его для создания базового кода шаблона для нашего middleware.

Перейдите в командную строку и перейдите в корень вашего проекта. Выполните следующую команду для создания middleware MobileRedirect.

И это должно создать файл app/Http/Middleware/MobileRedirect.php со следующим кодом.

Чаще всего вы заметите реализацию метода handle, который выступает в качестве основы middleware, и основная логика middleware, которую вы хотите реализовать, должна идти здесь.

Позвольте мне воспользоваться этой возможностью, чтобы представить типы middleware, с которым связан Laravel. В основном, это два типа - middleware до и middleware после.

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

В нашем случае нам необходимо перенаправить пользователя перед обработкой запроса, и, следовательно, это будет middleware до.

Идем дальше и модифицируем файл app/Http/Middleware/MobileRedirect.php со следующим содержимым.

Для простоты мы просто проверяем наличие параметра mobile querystring, и если он установлен на TRUE, пользователь будет перенаправлен на соответствующий URL-адрес мобильного сайта. Конечно, вы хотели бы использовать библиотеку обнаружения пользовательского агента, если хотите обнаружить ее в режиме реального времени.

Кроме того, вы хотели бы заменить маршрут mobile-site-url-go-here правильным маршрутом или URL-адресом, поскольку это просто место для демонстрационных целей.

Следуя нашей пользовательской логике, есть вызов $next($request), который позволяет обрабатывать запрос далее в цепочке приложения. В нашем случае важно отметить, что мы поместили логику обнаружения мобильного устройства до вызова $next($request), эффективно сделав его middleware до.

На этом наше middleware почти готово к тестированию. На данный момент Laravel не знает о нашем middleware. Чтобы это произошло, вам необходимо зарегистрировать ваше middleware с помощью приложения Laravel, и это будет темой нашего следующего раздела.

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

Как вы уже заметили, пользовательская логика middleware будет выполнена после того, как запрос будет обработан приложением Laravel. В это время у вас также есть доступ к объекту $response, который позволяет вам манипулировать определенными аспектами, если вы этого хотите.

Это было middleware после.

Наше пользовательское middleware в действии

В этом разделе описывается процесс регистрации middleware внутри приложения Laravel, чтобы он мог фактически быть вызван во время потока обработки запроса.

Откройте файл app/Http/Kernel.php и найдите следующий фрагмент.

Как вы можете видеть, $middleware содержит массив из middleware, который поставляется с установкой по умолчанию Laravel. Перечисленное здесь middleware будет выполняться к каждому запросу Laravel, и, таким образом, это идеальный кандидат для размещения нашего собственного middleware.

Двигаемся дальше и включаем наше middleware, как показано в следующем фрагменте.

Теперь попробуйте получить доступ к любому из ваших маршрутов Laravel с помощью querystring mobile=1, и это должно вызвать наш код middleware!

Таким образом, вы должны зарегистрировать свое middleware, которое должно выполняться к каждому запросу. Однако иногда вы хотите запускать свое middleware только для определенных маршрутов. Давайте проверим, как это сделать, используя $routeMiddleware.

В контексте нашего текущего примера предположим, что пользователи будут перенаправлены на мобильный сайт, если они получат доступ к определенному маршруту на вашем сайте. В этом случае вам не нужно включать ваше middleware в список $middleware.

Вместо этого вам нужно подключить middleware непосредственно к определению маршрута, как показано ниже.

Фактически, мы могли бы сделать еще один шаг и создать псевдоним для нашего middleware, чтобы вам не пришлось использовать встроенные имена классов.

Откройте файл app/Http/Kernel.php и найдите $routeMiddleware, который содержит сопоставления псевдонимов с middleware. Давайте включим нашу запись в этот список, как показано в следующем фрагменте.

И пересмотренное определение маршрута выглядит так.

На этом все. Это было довольно просто, не так ли?

Фактически, мы дошли до конца этой статьи, и я надеюсь, что вам это понравилось.

Заключение

Изучение архитектурной концепции в любых фреймворках - это всегда захватывающий материал, и именно это мы и сделали в этой статье, когда мы исследовали middleware Laravel.

Начиная с базового введения в middleware, мы переключили внимание на тему создания пользовательского middleware в приложении Laravel. И именно последняя половина статьи показала, как зарегистрировать ваше middleware в Laravel, и также возможность изучить различные способы, которыми вы могли бы подключить ваше middleware.

Надеюсь, путешествие было плодотворным, и статья помогла вам обогатить ваши знания. Кроме того, если вы хотите, чтобы я придумывал конкретные темы в следующих статьях, вы всегда можете рассказать мне об этом.

Вот и все на сегодня, и не стесняйтесь задавать свои запросы, если таковые имеются, используя фид ниже!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.