Maison  >  Article  >  cadre php  >  Diffusion d'événements dans Laravel : mise en œuvre de notifications en temps réel et de mises à jour de statut

Diffusion d'événements dans Laravel : mise en œuvre de notifications en temps réel et de mises à jour de statut

PHPz
PHPzoriginal
2023-08-25 14:46:491216parcourir

Diffusion dévénements dans Laravel : mise en œuvre de notifications en temps réel et de mises à jour de statut

Diffusion d'événements dans Laravel : implémentation de notifications en temps réel et de mises à jour de statut

Introduction :
Dans le développement d'applications Web modernes, les notifications en temps réel et les mises à jour de statut sont devenues une exigence de plus en plus importante. Imaginez que dans une application de blog, lorsqu'il y a de nouveaux commentaires ou likes, nous souhaitons informer immédiatement les utilisateurs pour offrir une meilleure expérience utilisateur. Le framework Laravel fournit une fonctionnalité très puissante pour répondre à cette exigence, à savoir la diffusion d'événements. Dans cet article, nous apprendrons comment utiliser la fonctionnalité de diffusion d'événements de Laravel pour obtenir des notifications en temps réel et des mises à jour de statut.

  1. Créer des événements et des auditeurs
    Tout d'abord, nous devons créer un événement et un auditeur correspondant. Event est en fait une simple classe PHP utilisée pour indiquer qu'un événement spécifique s'est produit. L'écouteur est utilisé pour gérer cet événement et effectuer les opérations correspondantes.

Ce qui suit est un exemple de création d'un événement de commentaire et d'un écouteur correspondant :

<?php

namespace AppEvents;

use IlluminateContractsBroadcastingShouldBroadcast;
use IlluminateFoundationEventsDispatchable;
use IlluminateQueueSerializesModels;

class NewComment implements ShouldBroadcast
{
    use Dispatchable, SerializesModels;

    public $comment;

    /**
     * Create a new event instance.
     *
     * @param $comment
     * @return void
     */
    public function __construct($comment)
    {
        $this->comment = $comment;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return IlluminateBroadcastingChannel|array
     */
    public function broadcastOn()
    {
        return new Channel('comments');
    }
}

Dans le code ci-dessus, l'événement NewComment implémente l'interface ShouldBroadcast, qui demande au Le framework Laravel pour gérer cet événement doit être diffusé. Le constructeur de l'événement accepte un objet commentaire comme paramètre et l'assigne à l'attribut $comment. La méthode broadcastOn renvoie une instance du canal de diffusion, ce qui signifie que l'événement doit être diffusé dans le canal comments. NewComment事件实现了ShouldBroadcast接口,它指示Laravel框架该事件需要被广播。事件的构造函数接受一个评论对象作为参数,并将其赋值给$comment属性。broadcastOn方法返回一个Broadcasting频道实例,即表示该事件需要在comments频道中进行广播。

下面是一个处理评论事件的监听器示例:

<?php

namespace AppListeners;

use AppEventsNewComment;
use IlluminateContractsQueueShouldQueue;
use IlluminateQueueInteractsWithQueue;

class SendCommentNotification implements ShouldQueue
{
    use InteractsWithQueue;

    /**
     * Handle the event.
     *
     * @param  NewComment  $event
     * @return void
     */
    public function handle(NewComment $event)
    {
        // 处理发送通知的逻辑
        // 例如,发送邮件通知用户
    }
}

上述代码中,SendCommentNotification监听器实现了ShouldQueue接口,表示该监听器可以被放入队列中异步执行。在handle方法中,我们可以编写处理事件的逻辑,例如发送邮件通知用户等等。

  1. 注册事件和监听器
    接下来,我们需要将事件和监听器进行注册,以便Laravel框架能够正确地触发事件并调用相应的监听器。

打开app/Providers/EventServiceProvider.php文件,在$listen数组中添加如下代码:

protected $listen = [
    'AppEventsNewComment' => [
        'AppListenersSendCommentNotification',
    ],
];

上述代码表示当NewComment事件发生时,将会调用SendCommentNotification监听器进行处理。

  1. 配置事件广播
    接下来,我们需要配置事件广播的驱动程序。Laravel框架默认使用redis作为事件广播的驱动程序。打开.env文件,确保以下配置正确设置:
BROADCAST_DRIVER=redis
  1. 使用事件广播
    现在我们可以使用事件广播来实现实时通知和状态更新了。下面是一个简单的例子来说明如何在控制器中触发事件:
<?php

namespace AppHttpControllers;

use AppEventsNewComment;
use AppModelsComment;
use IlluminateHttpRequest;

class CommentController extends Controller
{
    public function create(Request $request)
    {
        $comment = Comment::create([
            'content' => $request->input('content'),
            'user_id' => auth()->user()->id,
            // 其他属性
        ]);

        event(new NewComment($comment));

        // 你的其他代码逻辑

        return response()->json(['message' => 'Comment created successfully']);
    }
}

在上述代码中,我们首先创建一个评论对象,并通过event辅助函数来触发NewComment事件,并传递评论对象作为参数。这样,一旦评论创建成功,Laravel框架就会自动将该事件广播到指定的频道(在我们的例子中是comments频道)。

  1. 前端实时更新
    最后,我们需要在前端页面中实时监听事件广播,并进行相应的操作。Laravel框架提供了一个名为Echo的JavaScript库,可以帮助我们实现这个功能。首先,我们需要在前端页面中引入相关的JS文件:
<script src="{{asset('js/app.js')}}"></script>

然后,在JavaScript代码中,我们可以按照以下方式监听事件广播:

Echo.channel('comments')
    .listen('NewComment', (event) => {
        // 处理接收到的事件
        // 例如,显示新评论的内容
    });

上述代码中,我们通过Echo.channel方法来监听指定的频道(在我们的例子中是comments频道)。调用listen方法时,我们需要指定要监听的事件类型,这里是NewComment

listen

Ce qui suit est un exemple d'écouteur qui gère les événements de commentaires :

rrreee
Dans le code ci-dessus, l'écouteur SendCommentNotification implémente l'interface ShouldQueue, ce qui signifie que l'écouteur peut être placé Exécuté de manière asynchrone dans la file d'attente. Dans la méthode handle, nous pouvons écrire une logique pour gérer les événements, comme l'envoi d'e-mails pour avertir les utilisateurs, etc.

    🎜Enregistrer les événements et les auditeurs🎜Ensuite, nous devons enregistrer les événements et les auditeurs afin que le framework Laravel puisse déclencher correctement les événements et appeler les auditeurs correspondants. 🎜🎜🎜Ouvrez le fichier app/Providers/EventServiceProvider.php et ajoutez le code suivant dans le tableau $listen : 🎜rrreee🎜Le code ci-dessus signifie que lorsque NewCommentLorsque l'événement se produit, l'écouteur SendCommentNotification sera appelé pour traitement. 🎜
      🎜Configuration de la diffusion d'événements🎜Ensuite, nous devons configurer le pilote pour la diffusion d'événements. Le framework Laravel utilise redis comme pilote de diffusion d'événements par défaut. Ouvrez le fichier .env et assurez-vous que la configuration suivante est correctement définie : 🎜🎜rrreee
        🎜Utilisation des diffusions d'événements🎜Nous pouvons désormais utiliser les diffusions d'événements pour obtenir des notifications en temps réel et mises à jour de statut. Voici un exemple simple pour illustrer comment déclencher un événement dans un contrôleur : 🎜🎜rrreee🎜Dans le code ci-dessus, nous créons d'abord un objet commentaire et déclenchons le NewComment via la fonction d'assistance <code>event et passez l'objet commentaire en paramètre. De cette façon, une fois le commentaire créé avec succès, le framework Laravel diffusera automatiquement l'événement sur le canal spécifié (dans notre cas, le canal comments). 🎜
          🎜Mises à jour en temps réel du front-end🎜Enfin, nous devons écouter les diffusions d'événements en temps réel sur la page front-end et effectuer les opérations correspondantes. Le framework Laravel fournit une bibliothèque JavaScript appelée Echo qui peut nous aider à implémenter cette fonction. Tout d'abord, nous devons introduire les fichiers JS pertinents dans la page front-end : 🎜🎜rrreee🎜 Ensuite, dans le code JavaScript, nous pouvons écouter l'événement diffusé de la manière suivante : 🎜rrreee🎜Dans le code ci-dessus, nous passons Méthode Echo.channel pour écouter le canal spécifié (dans notre cas le canal <code>comments). Lors de l'appel de la méthode listen, nous devons spécifier le type d'événement à écouter, voici NewComment. 🎜🎜Dans la méthode listen, nous pouvons écrire une logique pour gérer les événements reçus, comme l'affichage du contenu des nouveaux commentaires sur la page. 🎜🎜Conclusion : 🎜En utilisant la fonction de diffusion d'événements de Laravel, nous pouvons facilement réaliser les besoins de notification en temps réel et de mises à jour de statut. Créez simplement les événements et les écouteurs correspondants, puis déclenchez les événements dans le contrôleur. En configurant la diffusion des événements et en écoutant les événements sur la page frontale, nous pouvons implémenter des fonctions de notification et de mise à jour de statut en temps réel dans l'application. J'espère que cet article vous sera utile ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn