如何使用Laravel框架中事件的事件

  介绍

这篇文章给大家介绍如何使用Laravel框架中事件的事件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<强>注册事件以及监听器

首先我们需要在app/供应商/目录下的EventServiceProvider。php中注册事件监听器映射关系,如下:

protected  listen 美元;=,(   ,,,& # 39;应用\ \ BlogView& # 39;事件,=祝辞,(   ,,,,,& # 39;应用程序\听众\ BlogViewListener& # 39;   ,,,,   ];才能

然后项目根目录下执行如下命令

php  artisan 事件:生成

该命令完成后,会分别自动在app/事件和app/Listensers目录下生成BlogView.php和BlogViewListener。php文件。

定义事件

& lt; php ?      namespace 应用\事件;      use 应用\ \事件事件;   use 应用\发布;   use 照亮\ \ SerializesModels队列;   use 照亮\ \广播\ ShouldBroadcast合同;      class  BlogView  extends 事件   {   use 才能;SerializesModels;      ,/* *   ,,*,Create  a  new  event 实例。   ,,*   ,,*,@return 空白   ,,*/public 才能;function  __construct (Post  post)美元   {才能   ,,,这个→美元post =,后美元;   ,,}      ,/* *   ,,*,Get 从而channels 从而event  should  be  broadcast 。   ,,*   ,,*,@return 数组   ,,*/public 才能;function 联欢()   {才能   ,,,return  [];   ,,}   }

其实看到这些你会发现该事件类只是注入了一个帖子实例罢了,并没有包含多余的逻辑。

<强>定义监听器
事件监听器在处理方法中接收事件实例,事件:生成命令将会自动在处理方法中导入合适的事件类和类型提示事件。在处理方法内,你可以执行任何需要的逻辑以响应事件,我们的代码实现如下:

& lt; php ?      namespace 应用\听众;      use 应用\ \ BlogView事件;   use 照亮\ \ InteractsWithQueue队列;   use 照亮\ \队列\ ShouldQueue合同;   use 照亮\会议\商店;      class  BlogViewListener   {   protected 才能;美元会话;   ,/* *   ,,*,Create 从而event 听众。   ,,*   ,,*,@return 空白   ,,*/public 才能;function  __construct (Store 会话美元)   {才能   ,,,这个→美元session =,美元会话;   ,,}      ,/* *   ,,*,Handle 从而事件。   ,,*   ,,*,@param  BlogView  $事件   ,,*,@return 空白   ,,*/public 才能;function 处理(BlogView 事件美元)   {才能   ,,,post 美元;=,事件→美元后;   ,,,,//先进行判断是否已经查看过   ,,,if  (! $ this→hasViewedBlog (post)美元),{   ,,,,,,//保存到数据库   ,,,,,美元后→view_cache =,美元后→view_cache  +, 1;   ,,,,,美元后→保存();   ,,,,,,//看过之后将保存到,Session    ,,,,,这个→美元storeViewedBlog ($);   ,,,}   ,,}      protected 才能;function  hasViewedBlog ($)   {才能   ,,,return  array_key_exists(美元后→id,这→美元getViewedBlogs ());   ,,}      protected 才能;function  getViewedBlogs ()   {才能   ,,,return  $ this→会话→得到(& # 39;viewed_Blogs& # 39;,, []);   ,,}      protected 才能;function  storeViewedBlog ($)   {才能   ,,,key 美元;=,& # 39;viewed_Blogs # 39;公司。美元后→id;      ,,,这个→美元会话→把(关键美元,,时间());   ,,}      }

注释中也已经说明了一些逻辑。

<强>触发事件
事件和事件监听完成后,我们要做的就是实现整个监听,即触发用户打开文章事件在此我们使用和事件提供的火方法,如下:

& lt; php ?      namespace 应用\ Http \控制器;      use 照亮\ Http \请求;   use 应用\发布;   use 阐明\ \外墙\事件的支持;   use 应用\ Http \请求;   use 应用\ \ BlogView事件;   use  \ App \ Http \控制器控制器;      class  BlogController  extends 控制器   {   ,,   public 才能;function  showPost(蛞蝓美元)   {才能   ,,,post 美元;=,职位:whereSlug($蛞蝓)→firstOrFail ();   ,,,的事件:火(new  BlogView (post)美元);   ,,,return 视图(& # 39;home.blog.content& # 39;)→withPost ($);   ,,}      }

如何使用Laravel框架中事件的事件