事件的原理及时 观察者模式的实现;
新建一个事件类(被观察者)
可以建立多个监听类(观察者)
然后标记观察者和被观察者的关系,当被观察者变化时,通知观察者(在appprovicderseventServiceProviders中标记事件类下的监听类)
建立事件类
php artisan make:event DelMsgEvent
会在appenents目录下创建
<?php
namespace App\Events;
use app\events\event;
use illuminate\queue\serializesmodels;
use illuminate\contracts\broadcasting\shouldbroadcast;
class delmsgevent extends event{
use serializesmodels;
/*
*被外部调用该事件时,可以传值
*@param $data
*/
public function __construct($data){
$this -> data();
}
}
建立监听者在applisteners目录下创建
<?php
namespace App\Listeners;
use App\Events\SomeEvent;
use Illuminate\Queue\InteractsWithQWueue;
use Illuminate\contracts\Queus\ShouldQueue;
class EventListener{
public function __construct(){
}
/*
*事件触发后,监听者的handle方法会被调用用来处理
*
*/
public function handle()someevent $event{
echo 'this is enentlisten';
}
}
建立事件和监听者的关系在appprovidersEventServiceProviders.php中的
protected $listen = [
'App\Events\SomeEvent'=>[
//事件监听者
'App\Listeners\EventListener',
'App\Listeners\SomeEventListener',
]
]
在控制器触发事件
//Event事件的支持,Event::fire所在的类
use Illuminate\Support\Facades\Event;
//要用到的事件
use App\Events\SomeEvent;
public function getShow()
{
$find = array(
"uid" => 55,
"msg.women" => false //搜索,根据msg字段中的women字段
);
$list = $this->collec->find($find);
foreach($list as $document) //是个对象,需要迭代遍历
{
var_dump($document);
}
//触发事件
Event::fire(new SomeEvent($list));
}