Laravel之事件Event

Posted 编程老头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel之事件Event相关的知识,希望对你有一定的参考价值。

适用场景:记录文章浏览量

php artisan make:event 事件名

示例:

php artisan make:event MyEvent

Laravel目录\\app\\Events已经生成MyEvent.php文件

<?php

namespace App\\Events;

use App\\Events\\Event;
use Illuminate\\Queue\\SerializesModels;
use Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast;

class MyEvent 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 [];
    }
}

事件必须有监听者,我们先在\\app\\Providers目录下找到EventServiceProvider.php文件,该文件内有一个Events-Listeners数组来保存事件和监听者的映射关系。

protected $listen = [
	\'App\\Events\\MyEvent\' => [
		\'App\\Listeners\\MyListener1\',
		\'App\\Listeners\\MyListener2\'
	]
];

这里,我们让一个事件有两个监听者,使用artisan控制台自动生成php文件

php artisan event:generate

Laravel\\app\\Listeners目录下已经生成了MyListener1.php和MyListener2.php

问题来了,我们怎么触发这个事件?

这里借用我们上一篇博客说的Console,来测试这个事件,如果你对Console不熟,可以看http://www.cnblogs.com/sweng/p/6358919.html

对Check类中修改handle()函数,使用Event::fire(new MyEvent())触发事件,实际上是传入一个Event对象

<?php

namespace App\\Console\\Commands;

use Illuminate\\Console\\Command;

//
use Illuminate\\Support\\Facades\\Event;
use App\\Events\\MyEvent;

class Check extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = \'check\';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = \'Command description\';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
		echo \'checking...\';
		Event::fire(new MyEvent());
    }
}

  

以上是关于Laravel之事件Event的主要内容,如果未能解决你的问题,请参考以下文章

Laravel5.1 事件--Event

Lumen/laravel Event Demo

Laravel框架中的event事件操作

jquery之event与originalEvent的关系event事件对象用法浅析

trigger()的event事件对象之坑

表关系以及在laravel控制器中如何使用它