Новое в Symfony 7.2: Уведомления на рабочем столе

Источник: «New in Symfony 7.2: Desktop Notifications»
Symfony 7.2 позволяет отправлять уведомления прямо на рабочий стол, используя новый канал desktop в компоненте Notifier.

Компонент Symfony Notifier позволяет уведомлять пользователей по таким каналам, как SMS-сообщения, чат сервисы, сообщения электронной почты и push-уведомления на смартфонах. В Symfony 7.2 мы добавили новый канал desktop для отправки уведомлений на рабочий стол.

Новый канал использует внутри проект JoliNotif, поэтому сначала его необходимо установить в приложение:

composer require symfony/joli-notif-notifier

Если вы используете Symfony Flex, установка этого пакета также создаст необходимую переменную среды в файле .env и обновит файл config/packages/notifier.yaml. Теперь вы готовы отправить своё первое уведомление на рабочий стол. Например, можно использовать его в стороннем проекте, чтобы получать уведомления о новых подписчиках:

use Symfony\Component\Notifier\Message\DesktopMessage;
use Symfony\Component\Notifier\TexterInterface;
// ...

class SomeService
{
public function __construct(
private TexterInterface $texter,
) {
}

public function notifyNewSubscriber(User $user, Subscription $subscription): void
{
$message = new DesktopMessage(
'New sale! 🎉',
sprintf('New subscriber: %s (%s)', $user->getFullName(), $subscription->getPriceAsString())
);

$texter->send($message);
}
}

Вот и всё. Теперь уведомления будут появляться на вашем рабочем столе:

Пример уведомления на рабочем столе в Symfony 7.2 Notifier
Пример уведомления на рабочем столе в Symfony 7.2 Notifier

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

use Symfony\Component\Notifier\Bridge\JoliNotif\JoliNotifOptions;
// ...

$options = (new JoliNotifOptions())
->setIconPath('/path/to/icons/error.png')
->setExtraOption('sound', 'sosumi')
->setExtraOption('url', 'https://example.com');

$message = new DesktopMessage('Production is down', <<<CONTENT
❌ Server prod-1 down
❌ Server prod-2 down
✅ Network is up
CONTENT, $options);

$texter->send($message);

Комментарии


Дополнительные материалы

Предыдущая Статья

Игнорирование определённых типов исключений в Laravel

Следующая Статья

Стрелочная функция vs. обычная функция в JavaScript