php artisan make:event <event-class>
在这里,<event-class>应使用事件类的名称来代替。创建的类将被存储在 app\events 目录。
php artisan handler:event <handler-class> --event = <event-class>
在这里,<event-class>应使用我们在步骤1来代替应,<handler-class> 创建事件类的名称使用处理程序类的名称来取代。新创建的处理程序类将被存储在app\handlers\events 目录。
现在,我们需要注册该事件在文件 - app\providers\eventserviceprovier.php。 此文件包含一个数组:$listen。在这个数组,我们需要事件类添加作为键以及事件处理程序类作为它的值。
最后一步是触发使用事件门面触发事伯。fire()方法由事件类的对象调用。事件可以触发如下 -
event::fire(<event class object>);
php artisan make:controller createstudentcontroller
app/http/controllers/createstudentcontroller.php
<?php namespace app\http\controllers; use illuminate\http\request; use db; use app\http\requests; use app\http\controllers\controller; use app\events\studentadded; 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)); } }
php artisan make:event studentadded
app\events\studentadded.php
<?php namespace app\events; use app\events\event; use illuminate\queue\serializesmodels; use illuminate\contracts\broadcasting\shouldbroadcast; class studentadded extends event { use serializesmodels; public $name; public function __construct($name) { $this->name = $name; } public function broadcaston() { return []; } }
第9步 - 创建一个事件处理文件在 app\handlers\events\handlenewstudentadded.php,复制以下代码到该文件中。
app\handlers\events\handlenewstudentadded.php
<?php namespace app\handlers\events; use app\events\studentadded; use illuminate\queue\interactswithqueue; use illuminate\contracts\queue\shouldqueue; 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步 - 现在,我们需要添加事件类和处理程序类存储在文件 - app\providers\eventserviceprovider.php
app\providers\eventserviceprovider.php
<?php namespace app\providers; use illuminate\contracts\events\dispatcher as dispatchercontract; use illuminate\foundation\support\providers\eventserviceprovider as serviceprovider; class eventserviceprovider extends serviceprovider { /** * the event listener mappings for the application. * * @var array */ protected $listen = [ 'app\events\someevent' => [ 'app\listeners\eventlistener', ], 'app\events\studentadded' => [ 'app\handlers\events\handlenewstudentadded', ], ]; /** * register any other events for your application. * * @param \illuminate\contracts\events\dispatcher $events * @return void */ public function boot(dispatchercontract $events) { parent::boot($events); // } }
app/http/routes.php
route::get('event','createstudentcontroller@insertform'); route::post('addstudent','createstudentcontroller@insert');
http://localhost:8000/event
第14步 - 增加学生的姓名,然后点击“添加学生”按钮,将您重定向到下面的屏幕。看看灰色高亮行。 我们已经指定处理方法,在一个事件被触发执行handlenewstudentadded类的处理方法时添加此行。