Как сделать push-уведомления на Yii 2 при откликах на стажировки
После того как система уведомлений через Pjax и AJAX работает, следующим шагом логично сделать уведомления реальными push-уведомлениями, которые будут приходить моментально, без постоянного опроса сервера. В этой статье разберём подход с использованием WebSocket и сервиса Pusher.
1. Выбор технологии
Для push-уведомлений есть два основных варианта:
- WebSocket — полноценное соединение между сервером и клиентом. Можно поднять через Ratchet или Swoole.
- Pusher — облачный сервис, который управляет WebSocket-подключениями и отправкой сообщений.
Я выбрал Pusher, чтобы не поднимать отдельный WebSocket-сервер и сэкономить время на инфраструктуру.
2. Установка Pusher SDK
Через Composer:
composer require pusher/pusher-php-server
3. Настройка Pusher в Yii 2
В конфиге приложения добавляем компонент:
<?php
'components' => [
'pusher' => [
'class' => 'Pusher\Pusher',
'key' => 'YOUR_APP_KEY',
'secret' => 'YOUR_APP_SECRET',
'app_id' => 'YOUR_APP_ID',
'options' => ['cluster' => 'YOUR_APP_CLUSTER', 'useTLS' => true]
],
],
?>
4. Создание уведомления через событие
При отклике на стажировку триггерим событие и отправляем push:
<?php
if ($model->save()) {
Yii::$app->trigger('internship.response', new \yii\base\Event([
'data' => [
'userId' => $model->internship->user_id,
'message' => "Новый отклик на вашу стажировку: {$model->internship->title}"
]
]));
}
Yii::$app->on('internship.response', function($event) {
$notification = new Notification();
$notification->user_id = $event->data['userId'];
$notification->message = $event->data['message'];
$notification->save();
// Отправка push через Pusher
$pusher = Yii::$app->pusher;
$pusher->trigger('notifications-channel', 'new-notification', [
'message' => $event->data['message'],
'userId' => $event->data['userId']
]);
});
?>
5. Отображение уведомлений на фронтенде
Подключаем Pusher.js:
<script src="https://js.pusher.com/7.2/pusher.min.js"></script>
И инициализируем подписку на канал:
<script>
Pusher.logToConsole = false;
var pusher = new Pusher('YOUR_APP_KEY', {
cluster: 'YOUR_APP_CLUSTER'
});
var channel = pusher.subscribe('notifications-channel');
channel.bind('new-notification', function(data) {
if(data.userId == CURRENT_USER_ID){
// Добавляем уведомление в список
var list = document.querySelector('.notifications-list');
var li = document.createElement('li');
li.textContent = data.message;
li.classList.add('new');
list.prepend(li);
}
});
</script>
6. Преимущества push-уведомлений
- Мгновенное оповещение пользователя о новом отклике.
- Не нужно постоянно опрашивать сервер через AJAX.
- История уведомлений остаётся в базе, можно комбинировать с Pjax.
- Легко масштабируется для большого количества пользователей.
7. Дружеский совет
Итог
Использование Pusher на Yii 2 позволяет легко реализовать систему push-уведомлений при откликах на стажировки. Пользователь получает уведомления мгновенно, а вы сохраняете контроль и историю в базе. Такой подход делает личный кабинет более интерактивным и современным.
Комментарии (0)
Оставить комментарий