最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分享個(gè)簡(jiǎn)單易懂且非常有用的laravel事件

 更新時(shí)間:2017年08月21日 09:55:22   作者:吟漸的小風(fēng)dee  
這篇文章主要給大家介紹了一個(gè)簡(jiǎn)單易懂并且非常有用的laravel事件,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

在開(kāi)始本文的正文之前,我們先說(shuō)一下在什么場(chǎng)景會(huì)使用這個(gè)事件功能。

事情大概是這樣的,需求要在用戶(hù)注冊(cè)的時(shí)候發(fā)一些幫助郵件給用戶(hù)(原本用戶(hù)在注冊(cè)之后已經(jīng)有發(fā)別的郵件的了,短信,IM什么的)

原來(lái)這個(gè)注冊(cè)的方法也就10多行代碼。但是有時(shí)候我們?yōu)榱耸∈?,直接在注?cè)代碼后面添加了各種代碼。

例如這個(gè)注冊(cè)方法本來(lái)是這樣的

<?php
namespace App\Htt\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
 public function register(Request $request)
 {
  //獲取參數(shù)
  //驗(yàn)證參數(shù)
  //寫(xiě)入數(shù)據(jù)庫(kù)
  //return 注冊(cè)信息
  
  
 }
}

現(xiàn)在有一個(gè)需求,要求注冊(cè)之后給用戶(hù)的郵箱發(fā)一個(gè)廣告,絕大多數(shù)的人(也包括以前的我)就直接在這后面接著寫(xiě)代碼了

<?php
namespace App\Htt\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
 public function register(Request $request)
 {
  //獲取參數(shù)
  //驗(yàn)證參數(shù)
  //寫(xiě)入數(shù)據(jù)庫(kù)
  
  //發(fā)送廣告郵件
  //return 注冊(cè)信息
  
  
 }
}

這是比較直觀的寫(xiě)法,后來(lái)又有需求要發(fā)個(gè)短信。

<?php
namespace App\Htt\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
 public function register(Request $request)
 {
  //獲取參數(shù)
  //驗(yàn)證參數(shù)
  //寫(xiě)入數(shù)據(jù)庫(kù)
  
  //發(fā)送廣告郵件
  //發(fā)送短信
  //return 注冊(cè)信息
  
  
 }
}

然后又有需求,要發(fā)IM消息,這樣的需求很多。這些方法如果你封裝了,可能也就一行代碼。

但是,在實(shí)際項(xiàng)目中,這個(gè)注冊(cè)方法里面已經(jīng)加了很多東西。如果多人開(kāi)發(fā)的話(huà)各種不方便。然后想到了laravel似乎有這個(gè)功能,但是一直都不知道怎么應(yīng)用,仔細(xì)看了一下手冊(cè),發(fā)現(xiàn)和自己的想法不謀而合。

laravel的事件功能實(shí)際上更傾向是一種管理手段,并不是沒(méi)了它我們就做不到了,只是它能讓我們做得更加好,更加優(yōu)雅。

laravel的事件是一種管理+實(shí)現(xiàn)的體現(xiàn),它首先有一個(gè)總的目錄,然后我們可以宏觀的看到所有的事件,而不需要每次都要打開(kāi)控制器的方法我們才能知道注冊(cè)后會(huì)發(fā)生什么,這一點(diǎn)很重要,非常的方便,我就不按著laravel的順序來(lái)講,而是按著實(shí)際情況來(lái)建立這種關(guān)系。

現(xiàn)在我們無(wú)非就是要在注冊(cè)之后要做一系列的事情,首先得注冊(cè)完之后調(diào)用一個(gè)事件,然后這個(gè)事件再做各種各樣的事

<?php
namespace App\Htt\Controllers;

use Illuminate\Http\Request;
//我們先引入一個(gè)事件類(lèi),名字自定義的,之后再一步一步創(chuàng)建
use App\Events\Register;

class UserController extends Controller
{
 public function register(Request $request)
 {
  //獲取參數(shù)
  //驗(yàn)證參數(shù)
  //寫(xiě)入數(shù)據(jù)庫(kù)
  //觸發(fā)事件,以后所有需要注冊(cè)后要做的事情,都不需要再這里加代碼了,我們只需要管理事件就好了
  //event方法是laravel自帶方法, $uid是外部參數(shù),看你需要做什么,傳什么參數(shù)了。注冊(cè)之后肯定有$uid的嘛
  event(new Register($uid));
  //return 注冊(cè)信息
  
  
 }
}

找到\app\Providers\EventServiceProvider.php文件。給它添加關(guān)系,告訴系統(tǒng),有人用event()調(diào)用了事件之后要被誰(shuí)監(jiān)聽(tīng)得到。

<?php

namespace App\Providers;

use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
 /**
  * The event listener mappings for the application.
  *
  * @var array
  */
 protected $listen = [
  // 用戶(hù)注冊(cè)后的事件
  'App\Events\Register' => [
   // 發(fā)送廣告郵件
   'App\Listeners\SendAdMail',
   // 發(fā)送短信
   'App\Listeners\SendSms',
   // 發(fā)送幫助信息
   'App\Listeners\SendHelpInformation',

  ],
 ];
}

這里是注冊(cè)事件的入口,相當(dāng)于一個(gè)總目錄,這樣就可以跟注冊(cè)代碼解耦了,以后要加?xùn)|西我們就不需要再去看注冊(cè)方法的代碼了

現(xiàn)在注冊(cè)完之后會(huì)觸發(fā)這個(gè)App\Events\Register類(lèi),然后這個(gè)類(lèi)會(huì)被App\Listeners\SendAdMail,App\Listeners\SendSms,App\Listeners\SendHelpInformation監(jiān)聽(tīng)得到,我們進(jìn)入app\Events目錄,創(chuàng)建Register這個(gè)類(lèi)

<?php

namespace App\Events;

class Register
{

 public $uid;

 /**
  * 創(chuàng)建一個(gè)新的事件實(shí)例.
  *
  * @param Order $order
  * @return void
  */
 public function __construct($uid)
 {
  $this->uid = $uid;
 }
}

這樣就可以了。

然后去app\Listeners目錄創(chuàng)建各種要做的事件監(jiān)聽(tīng)類(lèi)。

<?php

namespace App\Listeners;

use App\Events\Register;
use App\Models\User;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendHelpInformation implements ShouldQueue
{
 
 
 public function __construct()
 {
  //
 }

 
 public function handle(Register $event)
 {
  $uid = $event->uid;
  
  $user = User::find($uid);
  
  //......各種實(shí)現(xiàn)
 }
}

這個(gè)handle方法就是我們要做的具體實(shí)現(xiàn)了,有個(gè)很方便的功能就是如果implements ShouldQueue這個(gè)接口的話(huà)就會(huì)異步隊(duì)列執(zhí)行,如果去掉的話(huà)就是同步執(zhí)行。很方便有沒(méi)有,這樣代碼就解耦了,不需要再管注冊(cè)代碼了,在這里就能很方便的管理了。多人開(kāi)發(fā)也是單獨(dú)寫(xiě)自己的Listeners就可以了。

具體的建議大家去看看手冊(cè)吧,有些內(nèi)容我這里就不完全說(shuō)了。我只是拋磚引玉

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • YII框架中搜索分頁(yè)jQuery寫(xiě)法詳解

    YII框架中搜索分頁(yè)jQuery寫(xiě)法詳解

    這篇文章主要介紹了YII框架中搜索分頁(yè)jQuery寫(xiě)法詳解的相關(guān)資料,需非常不錯(cuò),具有參考借鑒價(jià)值,要的朋友可以參考下
    2016-12-12
  • thinkphp3.2.2實(shí)現(xiàn)生成多張縮略圖的方法

    thinkphp3.2.2實(shí)現(xiàn)生成多張縮略圖的方法

    這篇文章主要介紹了thinkphp3.2.2實(shí)現(xiàn)生成多張縮略圖的方法,通過(guò)調(diào)用ThinkPHP擴(kuò)展包的UploadFile類(lèi)實(shí)現(xiàn)針對(duì)上傳圖片的縮略圖處理,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • CI框架整合widget(頁(yè)面格局)的方法

    CI框架整合widget(頁(yè)面格局)的方法

    這篇文章主要介紹了CI框架整合widget(頁(yè)面格局)的方法,分析了widget頁(yè)面格局的作用及CI框架整合widget的具體實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-05-05
  • 利用php+mysql來(lái)做一個(gè)功能強(qiáng)大的在線(xiàn)計(jì)算器

    利用php+mysql來(lái)做一個(gè)功能強(qiáng)大的在線(xiàn)計(jì)算器

    有天在努力的搜索計(jì)算器,發(fā)現(xiàn)都是JavaScript,而且要一個(gè)個(gè)地點(diǎn)擊,并且不能記錄,輸入計(jì)算式子時(shí)容易出錯(cuò),于是就想了想該怎樣才能讓它好用點(diǎn)呢,能夠用鍵盤(pán)直接輸入。
    2010-10-10
  • PHP的openssl加密擴(kuò)展使用小結(jié)(推薦)

    PHP的openssl加密擴(kuò)展使用小結(jié)(推薦)

    下面小編就為大家?guī)?lái)一篇PHP的openssl加密擴(kuò)展使用小結(jié)(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • 詳解 PHP加密解密字符串函數(shù)附源碼下載

    詳解 PHP加密解密字符串函數(shù)附源碼下載

    項(xiàng)目中有時(shí)我們需要使用PHP將特定的信息進(jìn)行加密,也就是通過(guò)加密算法生成一個(gè)加密字符串,這個(gè)加密后的字符串可以通過(guò)解密算法進(jìn)行解密,便于程序?qū)饷芎蟮男畔⑦M(jìn)行處理
    2015-12-12
  • php使用event擴(kuò)展的io復(fù)用測(cè)試的示例

    php使用event擴(kuò)展的io復(fù)用測(cè)試的示例

    這篇文章主要介紹了php使用event擴(kuò)展的io復(fù)用測(cè)試的示例,幫助大家更好的理解和使用php,感興趣的朋友可以了解下
    2020-10-10
  • 淺析PHP中的閉包和匿名函數(shù)

    淺析PHP中的閉包和匿名函數(shù)

    PHP閉包和匿名函數(shù)使用的句法與普通函數(shù)相同,但閉包和匿名函數(shù)其實(shí)是偽裝成函數(shù)的對(duì)象(Closure類(lèi)的實(shí)例) 。下面給大家介紹PHP中的閉包和匿名函數(shù)知識(shí),需要的朋友參考下吧
    2017-12-12
  • 基于PHP后臺(tái)的Android新聞瀏覽客戶(hù)端

    基于PHP后臺(tái)的Android新聞瀏覽客戶(hù)端

    這篇文章主要為大家詳細(xì)介紹了基于PHP后臺(tái)的Android新聞瀏覽客戶(hù)端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • CodeIgniter連貫操作的底層原理分析

    CodeIgniter連貫操作的底層原理分析

    這篇文章主要介紹了CodeIgniter連貫操作的底層原理,結(jié)合實(shí)例形式分析了CodeIgniter中常見(jiàn)的php oop連貫操作實(shí)現(xiàn)原理,具有很大的通用性,代碼簡(jiǎn)單易懂,需要的朋友可以參考下
    2016-05-05

最新評(píng)論

吴江市| 中阳县| 高雄县| 三穗县| 儋州市| 贵州省| 吉水县| 兖州市| 安康市| 澎湖县| 永登县| 江津市| 虞城县| 鄂托克旗| 卢氏县| 蕉岭县| 会泽县| 陕西省| 桐柏县| 本溪市| 三明市| 祥云县| 宜春市| 柞水县| 大庆市| 阳朔县| 苗栗县| 喀什市| 宝清县| 海丰县| 微博| 茌平县| 门头沟区| 施甸县| 盘山县| 和田市| 邢台市| 青阳县| 宜都市| 翁牛特旗| 彭阳县|