7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Laravel

Уведомления в Laravel

Read Time: 7 mins

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

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

Основы уведомлений

Во время разработки приложений вам часто приходится уведомлять пользователей о различных изменениях состояния. Это может быть либо отправка уведомлений по электронной почте, когда статус заказа изменен, либо отправка СМС об их активности входа в целях безопасности. В частности, мы говорим о коротких сообщениях и просто даем представление об изменениях состояния.

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

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

  • Mail: уведомления будут отправляться пользователям в виде электронной почты.
  • SMS: Как следует из названия, пользователи получат SMS-уведомления на своем телефоне.
  • Slack: в этом случае уведомления будут отправляться по каналам Slack.
  • Database: эта опция позволяет хранить уведомления в базе данных, если вы хотите создать пользовательский интерфейс для его отображения.

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

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

Создаем пользовательский класс уведомлений

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

В этом разделе мы создадим файлы, необходимые для реализации нашего use-case.

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

Нам также нужно добавить несколько полей, например, to, from и message в таблицу messages. Итак, давайте сменим файл миграции перед запуском команды migrate.

Теперь давайте запустим команду migrate, которая создает таблицу сообщений в базе данных.

Это должно создать таблицу messages в базе данных.

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

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

Это должно создать класс app/Notifications/NewMessage.php, поэтому давайте заменим содержимое этого файла следующим содержимым.

Поскольку мы будем использовать почтовый канал для отправки уведомлений пользователям, соответствующий метод  via будет настроен соответствующим образом. Таким образом, это метод, который позволяет вам настроить тип канала для уведомления.

Затем существует метод toMail, который позволяет настраивать различные параметры электронной почты. Фактически метод toMail должен возвращать экземпляр \Illuminate\Notifications\Messages\MailMessage, и этот класс предоставляет полезные методы, которые позволяют настраивать параметры электронной почты.

Среди различных методов метод line позволяет вам добавить одну строку в сообщение. С другой стороны, есть метод action, который позволяет вам добавить кнопку вызова в сообщении.

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

В конце вам нужно убедиться, что вы реализуете необходимые методы в соответствии с типом канала, сконфигурированным в методе via. Например, если вы используете канал базы данных, который хранит уведомления в базе данных, вам не нужно настраивать метод toMail; вместо этого вы должны реализовать метод toArray, который форматирует данные, которые необходимо сохранить в базе данных.

Как отправлять уведомления

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

Давайте создадим файл контроллера в файле app/Http/Controllers/NotificationController.php со следующим содержимым.

Конечно, вам нужно добавить соответствующий маршрут в файле routes/web.php.

Существует два способа, с помощью которых Laravel позволяет отправлять уведомления: используя либо уведомляемый объект, либо фасад уведомления.

Если класс модели сущности использует трейт Illuminate\Notifications\Notifiable, вы можете вызвать метод notify на этой модели. Класс App\User реализует трейт Notifiable и, таким образом, становится уведомляемой сущностью. С другой стороны, вы также можете использовать фасад Illuminate\Support\Facades\Notification для отправки уведомлений пользователям.

Давайте рассмотрим метод index контроллера.

В нашем случае мы сообщим пользователям, когда они получат новое сообщение. Поэтому мы попытались имитировать это поведение в методе index .

Затем мы уведомили пользователя-получателя о новом сообщении, используя метод notify объекта $toUser, так как это notifiable сущность.

Возможно, вы заметили, что мы также передаем объект $fromUser в первом аргументе метода __construct, так как мы хотим включить имя пользователя from в сообщение.

С другой стороны, если вы хотите имитировать его, используя фасад Notification, это довольно легко сделать, используя следующий фрагмент.

Как вы можете видеть, мы использовали метод send фасада Notification для отправки уведомления пользователю.

Перейдите и откройте URL-адрес http://your-laravel-site-domain/notify/index в вашем браузере. Если вы еще не вошли в систему, вы будете перенаправлены на экран входа в систему. После входа в систему вы должны получить электронное письмо с уведомлением по адресу электронной почты пользователя 1.

Вам может быть интересно, как система уведомлений обнаруживает адрес to, если мы еще не настроили его. В этом случае система уведомлений пытается найти свойство email в уведомляемом объекте. А класс объекта App\User уже имеет это свойство, поскольку мы используем систему аутентификации Laravel.

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

Теперь система уведомлений должна искать свойство email_address вместо свойства email для извлечения адреса to.

И вот как следует использовать систему уведомлений в Laravel. На этом мы подходим к концу этой статьи!

Заключение

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

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

Для тех из вас, кто только начинает работать с Laravel или хочет расширить свои знания, создать сайт или приложение, у нас есть множество вещей, которые вы можете изучать на Envato Market.

Если у вас есть какие-либо вопросы или предложения, не стесняйтесь публиковать их, используя приведенный ниже канал!

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.
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.