×
Laravel教程Laravel环境安装配置Laravel应用程序结构Laravel配置Laravel路由Laravel中间件Laravel控制器Laravel请求Laravel CookieLaravel响应Laravel视图Laravel重定向Laravel操作数据库Laravel插入数据库表数据Laravel检索查询数据Laravel更新数据Laravel删除数据Laravel错误和日志记录Laravel表单处理Laravel本地化Laravel会话(session)Laravel验证Laravel文件上传Laravel发送邮件Laravel AjaxLaravel错误处理Laravel事件处理Laravel FacadesLaravel安全

Laravel事件处理


事件是通过程序所识别并程序可进行处理的动作或发生。Laravel事件只是提供了一个观察者的实现。事件可以通过以下步骤来处理 -
第1步 - 创建一个事件类。
事件类可以通过执行以下命令来创建。
php artisan make:event <event-class> 

在这里,<event-class>应使用事件类的名称来代替。创建的类将被存储在 appEvents 目录。

第2步 - 创建一个处理类来处理创建的事件。

事件处理类可以通过执行以下命令来创建。
php artisan handler:event <handler-class> --event = <event-class> 

在这里,<event-class>应使用我们在步骤1来代替应,<handler-class> 创建事件类的名称使用处理程序类的名称来取代。新创建的处理程序类将被存储在appHandlersEvents 目录。

第3步 - 注册事件类及其事件服务提供者类处理程序。

现在,我们需要注册该事件在文件 - appProvidersEventServiceProvier.php。 此文件包含一个数组:$listen。在这个数组,我们需要事件类添加作为键以及事件处理程序类作为它的值。

第4步 - 触发事件。

最后一步是触发使用事件门面触发事伯。fire()方法由事件类的对象调用。事件可以触发如下 -

Event::fire(<Event Class Object>);
<Event Class Object>应使用事件类的对象来代替。

实例

第1步 - 通过执行以下命令来创建一个名为CreateStudent 的控制器。
php artisan make:controller CreateStudentController 
第2步 - 成功执行后,您会收到以下输出 -


第3步 - 复制下面的代码到文件 - app/Http/Controllers/CreateStudentController.php

app/Http/Controllers/CreateStudentController.php

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use DB;
use AppHttpRequests;
use AppHttpControllersController;
use AppEventsStudentAdded;
use Event;

class CreateStudentController extends Controller {
   public function insertform(){
      return view('stud_add');
   }
   
   public function insert(Request $request){
      $name = $request->input('stud_name');
      $age = $request->input('stud_age');
DB::insert('insert into student (name,age) values(?, ?)',[$name, $age]); echo "Record inserted successfully.<br/>"; echo '<a href = "/event">Click Here</a> to go back.'; //firing an event Event::fire(new StudentAdded($name)); } }
第4步- 创建通过执行以下命令添加名为 StudentAdded 的事件。
php artisan make:event StudentAdded
第5步 - 成功执行后,您会收到以下输出 -


第6步 - 上面的命令将在 AppEventsStudentAdded.php 文件创建事件。复制以下代码到该文件中。

AppEventsStudentAdded.php

<?php
namespace AppEvents;
use AppEventsEvent;
use IlluminateQueueSerializesModels;
use IlluminateContractsBroadcastingShouldBroadcast;

class StudentAdded extends Event {
   use SerializesModels;
   public $name;
  
   public function __construct($name) {
      $this->name = $name;
   }
   public function broadcastOn() {
      return [];
   }
}

第9步 - 创建一个事件处理文件在 appHandlersEventsHandleNewStudentAdded.php,复制以下代码到该文件中。

appHandlersEventsHandleNewStudentAdded.php

<?php
namespace AppHandlersEvents;
use AppEventsStudentAdded;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;

class HandleNewStudentAdded {
   protected $name;
   
   public function __construct() {
      //
   }
   public function handle(StudentAdded $event) {
      $this->name = $event->name;
      echo "<br><u>New Student added in database with name: </u>".$this->name;
   }
} 

第10步 - 现在,我们需要添加事件类和处理程序类存储在文件 - appProvidersEventServiceProvider.php

appProvidersEventServiceProvider.php

<?php
namespace AppProviders;
use IlluminateContractsEventsDispatcher as DispatcherContract;
use IlluminateFoundationSupportProvidersEventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider {
   /**
   * The event listener mappings for the application.
   *
   * @var array
   */
   protected $listen = [
      'AppEventsSomeEvent' => [
         'AppListenersEventListener',
      ],
   
      'AppEventsStudentAdded' => [
         'AppHandlersEventsHandleNewStudentAdded',
      ],
   ];
   /**
   * Register any other events for your application.
   *
   * @param IlluminateContractsEventsDispatcher $events
   * @return void
   */
   public function boot(DispatcherContract $events) {
      parent::boot($events);
      //
   }
}
第11步- 添加以下行到文件 - app/Http/routes.php

app/Http/routes.php

Route::get('event','CreateStudentController@insertform');
Route::post('addstudent','CreateStudentController@insert');
第12步 - 访问以下网址测试活动。

http://localhost:8000/event

第13步 - 访问上述网址后,您会收到以下输出 -


第14步 - 增加学生的姓名,然后点击“添加学生”按钮,将您重定向到下面的屏幕。看看灰色高亮行。 我们已经指定处理方法,在一个事件被触发执行HandleNewStudentAdded类的处理方法时添加此行。



分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)