亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Laravel5.1事件、事件監聽的簡單應用

2019-11-14 14:38:31
字體:
來源:轉載
供稿:網友

?

有時候當我們單純的看 Laravel 手冊的時候會有一些疑惑,比如說系統服務下的授權和事件,這些功能服務的應用場景是什么,其實如果沒有經歷過一定的開發經驗有這些疑惑是很正常的事情,但是當我們在工作中多加思考會發現有時候這些服務其實我們一直都見過。下面就事件、事件監聽舉一個很簡單的例子你就會發現。

? 這個例子是關于文章的瀏覽數的實現,當用戶查看文章的時候文章的瀏覽數會增加1,用戶查看文章就是一個事件,有了事件,就需要一個事件監聽器,對監聽的事件發生后執行相應的操作(文章瀏覽數加1),其實這種監聽機制在 Laravel 中是通過觀察者模式實現的.

注冊事件以及監聽器

首先我們需要在 app/PRoviders/目錄下的EventServiceProvider.php中注冊事件監聽器映射關系,如下:

protected $listen = [        'App/Events/BlogView' => [            'App/Listeners/BlogViewListener',        ],    ];

然后項目根目錄下執行如下命令

php artisan event:generate

該命令完成后,會分別自動在 app/Eventsapp/Listensers目錄下生成 BlogView.phpBlogViewListener.php文件。

定義事件

<?phpnamespace App/Events;use App/Events/Event;use App/Post;use Illuminate/Queue/SerializesModels;use Illuminate/Contracts/Broadcasting/ShouldBroadcast;class BlogView extends Event{    use SerializesModels;    /**     * Create a new event instance.     *     * @return void     */    public function __construct(Post $post)    {        $this->post = $post;    }    /**     * Get the channels the event should be broadcast on.     *     * @return array     */    public function broadcastOn()    {        return [];    }}

其實看到這些你會發現該事件類只是注入了一個 Post實例罷了,并沒有包含多余的邏輯。

定義監聽器

事件監聽器在handle方法中接收事件實例,event:generate命令將會自動在handle方法中導入合適的事件類和類型提示事件。在handle方法內,你可以執行任何需要的邏輯以響應事件,我們的代碼實現如下:

<?phpnamespace App/Listeners;use App/Events/BlogView;use Illuminate/Queue/InteractsWithQueue;use Illuminate/Contracts/Queue/ShouldQueue;use Illuminate/session/Store;class BlogViewListener{    protected $session;    /**     * Create the event listener.     *     * @return void     */    public function __construct(Store $session)    {        $this->session = $session;    }    /**     * Handle the event.     *     * @param  BlogView  $event     * @return void     */    public function handle(BlogView $event)    {        $post = $event->post;        //先進行判斷是否已經查看過        if (!$this->hasViewedBlog($post)) {            //保存到數據庫            $post->view_cache = $post->view_cache + 1;            $post->save();            //看過之后將保存到 Session             $this->storeViewedBlog($post);        }    }    protected function hasViewedBlog($post)    {        return array_key_exists($post->id, $this->getViewedBlogs());    }    protected function getViewedBlogs()    {        return $this->session->get('viewed_Blogs', []);    }    protected function storeViewedBlog($post)    {        $key = 'viewed_Blogs.'.$post->id;        $this->session->put($key, time());    }}

注釋中也已經說明了一些邏輯。

觸發事件

事件和事件監聽完成后,我們要做的就是實現整個監聽,即觸發用戶打開文章事件在此我們使用和 Event提供的 fire方法,如下:

<?phpnamespace App/Http/Controllers;use Illuminate/Http/Request;use App/Post;use Illuminate/Support/Facades/Event;use App/Http/Requests;use App/Events/BlogView;use App/Http/Controllers/Controller;class BlogController extends Controller{       public function showPost($slug)    {        $post = Post::whereSlug($slug)->firstOrFail();        Event::fire(new BlogView($post));        return view('home.blog.content')->withPost($post);    }}

現在打開頁面發現數據庫中的`view_cache已經正常加1了,這樣整個就完成了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线国产精品播放| 精品福利在线视频| 欧美一级淫片丝袜脚交| 国产成人精品电影久久久| 夜夜狂射影院欧美极品| 国产精品普通话| 亚洲国产高清高潮精品美女| 欧美性xxxxxx| 狠狠躁天天躁日日躁欧美| 亚洲人成欧美中文字幕| 国产精品白嫩美女在线观看| 日韩视频免费在线观看| 国模精品视频一区二区三区| 国产91精品久| 国产精品av在线| 精品日本美女福利在线观看| 7m第一福利500精品视频| 欧美视频一区二区三区…| 欧美激情综合色综合啪啪五月| 91精品国产综合久久香蕉的用户体验| 亚洲第一页自拍| 亚洲精品日韩欧美| 在线播放亚洲激情| 久久久久久久久国产精品| 98精品国产自产在线观看| 日本精品视频在线| www.日本久久久久com.| 韩国欧美亚洲国产| 亚洲最新av网址| 国产国语videosex另类| 国产精品天天狠天天看| 日韩免费精品视频| 夜夜躁日日躁狠狠久久88av| 岛国视频午夜一区免费在线观看| 亚洲一区av在线播放| 欧美老女人bb| 亚洲欧美在线一区| 午夜精品一区二区三区在线播放| 国产精品国模在线| 欧美福利视频在线观看| 欧美精品在线网站| 欧美华人在线视频| 国语自产精品视频在线看一大j8| 亚洲男人天堂网站| 91成人在线播放| 久久精彩免费视频| 日韩在线免费高清视频| 欧美在线视频免费观看| 久久精品国产亚洲精品2020| 国产精品69久久| 国产欧美日韩中文| 色综合天天狠天天透天天伊人| 久久在线精品视频| 亚洲网站在线播放| 亚洲毛片在线免费观看| 中文字幕不卡av| 亚洲国产天堂网精品网站| 最好看的2019的中文字幕视频| 精品网站999www| 成人欧美一区二区三区在线| 97婷婷大伊香蕉精品视频| 国产精品视频一| 中文欧美在线视频| 黑人精品xxx一区一二区| 亚洲欧美另类人妖| 亚洲一区中文字幕在线观看| 91精品在线播放| 亚洲视频在线播放| 精品国内亚洲在观看18黄| 最好看的2019的中文字幕视频| 日韩中文字幕网站| 在线日韩精品视频| 亚洲伊人成综合成人网| 91精品国产综合久久香蕉的用户体验| 国产噜噜噜噜噜久久久久久久久| 精品国产一区二区三区久久| 欧美电影免费观看高清| 国产精品黄色影片导航在线观看| 亚洲女人天堂网| 欧美精品久久久久久久久久| 成人黄色免费网站在线观看| 亚洲视频自拍偷拍| 久久精品人人做人人爽| 1769国产精品| 91精品国产91久久久久| 91精品国产91久久久久久不卡| 91在线精品视频| 久久精品影视伊人网| 国产精品视频一区二区高潮| www高清在线视频日韩欧美| 欧美日韩精品中文字幕| 欧美理论电影网| 亚洲专区中文字幕| 九九热精品在线| 亚洲国语精品自产拍在线观看| 91精品久久久久久久久久久久久| 欧美人在线观看| 中文字幕av一区| 日韩美女免费视频| 4444欧美成人kkkk| 欧美日韩一区二区免费在线观看| 国产成人精品av| 欧美午夜影院在线视频| 美女少妇精品视频| 国产精品视频内| 国产精品久久999| 青草青草久热精品视频在线观看| 中日韩美女免费视频网址在线观看| 91久久国产精品91久久性色| 欧美亚洲午夜视频在线观看| 奇米四色中文综合久久| 亚洲成人黄色在线观看| www.欧美三级电影.com| 色婷婷综合久久久久| 538国产精品视频一区二区| 成人国产精品免费视频| 日韩精品极品视频| 一本色道久久88综合日韩精品| 欧美日韩福利电影| 亚洲福利在线播放| 中文字幕久久亚洲| 国产在线播放不卡| 中日韩午夜理伦电影免费| 亚洲精品永久免费精品| 亚洲xxx自由成熟| 日韩欧美成人网| 亚洲午夜激情免费视频| 欧美在线不卡区| 一区二区三区国产在线观看| 日韩精品视频中文在线观看| 亚洲视频电影图片偷拍一区| 日韩av在线不卡| 久久久久国色av免费观看性色| 国产一区二区三区精品久久久| 欧美交受高潮1| 国产成人自拍视频在线观看| 精品亚洲一区二区三区在线播放| 欧美成人剧情片在线观看| 精品视频久久久久久| 亚洲国产欧美在线成人app| 91精品美女在线| 日韩成人中文电影| 国产91在线播放精品91| 亚洲免费av电影| 亚洲成色www8888| 深夜精品寂寞黄网站在线观看| 亚洲国产成人一区| 黄色一区二区在线观看| 欧美极品美女视频网站在线观看免费| 狠狠爱在线视频一区| 黑人精品xxx一区一二区| 欧美最顶级丰满的aⅴ艳星| 欧美另类在线播放| 欧美尺度大的性做爰视频| 亚洲精品理论电影| zzijzzij亚洲日本成熟少妇| 另类专区欧美制服同性| 91成人福利在线| 国产一区二区在线免费| 久久精品视频免费播放| 欧美激情区在线播放| 成人免费xxxxx在线观看| 成人xvideos免费视频| 在线性视频日韩欧美|