- Laravel 教程
- Laravel - 首页
- Laravel - 概述
- Laravel - 安装
- Laravel - 应用结构
- Laravel - 配置
- Laravel - 路由
- Laravel - 中间件
- Laravel - 命名空间
- Laravel - 控制器
- Laravel - 请求
- Laravel - Cookie
- Laravel - 响应
- Laravel - 视图
- Laravel - Blade 模板
- Laravel - 重定向
- Laravel - 数据库操作
- Laravel - 错误与日志
- Laravel - 表单
- Laravel - 国际化
- Laravel - 会话
- Laravel - 验证
- Laravel - 文件上传
- Laravel - 发送邮件
- Laravel - Ajax
- Laravel - 错误处理
- Laravel - 事件处理
- Laravel - Facades
- Laravel - Contracts
- Laravel - CSRF 保护
- Laravel - 认证
- Laravel - 授权
- Laravel - Artisan 控制台
- Laravel - 加密
- Laravel - 哈希
- 理解发布流程
- Laravel - 游客用户权限
- Laravel - Artisan 命令
- Laravel - 分页自定义
- Laravel - Dump Server
- Laravel - Action URL
- Laravel 有用资源
- Laravel - 快速指南
- Laravel - 有用资源
- Laravel - 讨论
Laravel - 事件处理
事件提供了一个简单的观察者实现,允许用户订阅和监听 Web 应用中触发的各种事件。所有 Laravel 中的事件类都存储在 **app/Events** 文件夹中,监听器存储在 **app/Listeners** 文件夹中。
在 Web 应用中生成事件和监听器的 Artisan 命令如下所示:
php artisan event:generate
此命令将事件和监听器生成到上面讨论的相应文件夹中。
事件和监听器提供了一种很好的方式来解耦 Web 应用,因为一个事件可以有多个监听器,而这些监听器彼此独立。Artisan 命令创建的事件文件夹包含以下两个文件:event.php 和 SomeEvent.php。它们显示如下:
Event.php
<?php namespace App\Events; abstract class Event{ // }
如上所述,**event.php** 包含类 **Event** 的基本定义,并调用命名空间 **App\Events**。请注意,用户定义的或自定义事件是在此文件中创建的。
SomeEvent.php
<?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class SomeEvent extends Event{ use SerializesModels; /** * Create a new event instance. * * @return void */ public function __construct() { // } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return []; } }
观察到此文件使用序列化来广播 Web 应用中的事件,并且在此文件中也初始化了必要的参数。
例如,如果我们需要在构造函数中初始化 order 变量以注册事件,我们可以按以下方式进行:
public function __construct(Order $order) { $this->order = $order; }
监听器
监听器处理正在注册的事件中提到的所有活动。Artisan 命令 **event:generate** 在 **app/listeners** 目录中创建所有 **监听器**。Listeners 文件夹包含一个文件 **EventListener.php**,其中包含处理监听器所需的所有方法。
EventListener.php
<?php namespace App\Listeners; use App\Events\SomeEvent; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class EventListener{ /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param SomeEvent $event * @return void */ public function handle(SomeEvent $event) { // } }
如代码中所述,它包含用于管理各种事件的 **handle** 函数。我们可以创建各种独立的监听器来针对单个事件。
广告