laravel 事件监听

2018-07-16 09:47:13   php分享记录

 

laravel的事件监听

1.事件监听是为了降低程序之间的耦合,监听程序以观察者模式监听事件的发生,事件发生后执行预先设定好的处理逻辑

2.基本实现方法:

2.1 基本文件的文件的生成

  1. //在app/Providers/EventServiceProvider 中的注册事件与监听间的映射关系
  2. protected $listen = [
  3. 'App\Events\PostSaved' => [
  4. 'App\Listeners\SaveDataToCache',
  5. ],
  6. ];
  7. //命令行执行
  8. php artisan event::generate
  9. //程序执行完成后,会在app/Events目录以及app/Listen目录下生成对应的映射文件
  10. PostSaved.php 以及 SaveDataToCache.php

2.2文件生成完毕后,定义事件类

  1. public function __construct(Post $Post)
  2. {
  3. $this->Post = $post;
  4. }

2.3 定义监听器类

  1. public function handle(PostSaved $event)
  2. {
  3. //
  4. $post = $event->post;
  5. Log::info("保存成功.id 为:".$post->id);
  6. }

2.4 事件的触发

  1. 事件的触发,我们需要在代码中完成,比如我们可以在指定方法中添加
  2. public function store(Request $request)
  3. {
  4. $title = $request->input('title');
  5. $content = $request->input('content');
  6. $post = new Post();
  7. $post->title = $title;
  8. $post->content = $content;
  9. $post->save();
  10. //注意 use Illuminate\Support\Facades\Event;
  11. Event::fire(new PostSaved($post));
  12. //或者使用event(new PostSaved($post));
  13. return redirect()->route('post.show',['post'=>$post]);
  14. }

最后,在我们访问store方法时,就会自动触发该事件了