成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel 5.1 事件、事件監(jiān)聽的簡單應(yīng)用

TIGERB / 2746人閱讀

摘要:下面就事件事件監(jiān)聽舉一個很簡單的例子你就會發(fā)現(xiàn)。定義監(jiān)聽器事件監(jiān)聽器在方法中接收事件實例,命令將會自動在方法中導(dǎo)入合適的事件類和類型提示事件。

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

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

注冊事件以及監(jiān)聽器

首先我們需要在 app/Providers/目錄下的EventServiceProvider.php中注冊事件監(jiān)聽器映射關(guān)系,如下:

protected $listen = [
        "AppEventsBlogView" => [
            "AppListenersBlogViewListener",
        ],
    ];

然后項目根目錄下執(zhí)行如下命令

php artisan event:generate

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

定義事件
post = $post;
    }

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return [];
    }
}

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

定義監(jiān)聽器

事件監(jiān)聽器在handle方法中接收事件實例,event:generate命令將會自動在handle方法中導(dǎo)入合適的事件類和類型提示事件。在handle方法內(nèi),你可以執(zhí)行任何需要的邏輯以響應(yīng)事件,我們的代碼實現(xiàn)如下:

session = $session;
    }

    /**
     * Handle the event.
     *
     * @param  BlogView  $event
     * @return void
     */
    public function handle(BlogView $event)
    {
        $post = $event->post;
          //先進行判斷是否已經(jīng)查看過
        if (!$this->hasViewedBlog($post)) {
              //保存到數(shù)據(jù)庫
            $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());
    }

}

注釋中也已經(jīng)說明了一些邏輯。

觸發(fā)事件

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

firstOrFail();
        Event::fire(new BlogView($post));
        return view("home.blog.content")->withPost($post);
    }

}

現(xiàn)在打開頁面發(fā)現(xiàn)數(shù)據(jù)庫中的 view_cache 已經(jīng)正常加1了,這樣整個就完成了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21232.html

相關(guān)文章

  • [譯] Laravel 5 之美 - 單元測試

    摘要:事實上,這是討論測試的惟一一章。因此,在中沒有單一的測試方法。包含了這是的標準強調(diào)業(yè)務(wù)或特性測試是最流行的框架。然后我們在這個項目中使用進行單元測試。在隨后的章節(jié)中,將不再進行測試。 原文地址: Laravel 5.1 Beauty - Testing Note 本系列第四節(jié)內(nèi)容. 本章會創(chuàng)建一個以后可以用到的項目便于以后我們的課程使用, 同時也會查課各種測試選項. 以后一段時間內(nèi)會開...

    fuyi501 評論0 收藏0
  • Laravel 動態(tài)添加 Artisan 命令最佳實踐

    摘要:初步嘗試既然最常見的注冊命令的方式是修改類中的,那么一般正常人都會從這邊開始下手。又要自己取出實例,又要自己調(diào)用方法,調(diào)用方法之前還有自己先把實例化這么繁瑣,肯定不是運行時添加命令的最佳實踐,所以我決定繼續(xù)尋找更優(yōu)解。 本文首發(fā)于我的博客,原文鏈接:https://blessing.studio/best-... 雖然 Laravel 官方文檔提供的添加 Artisan Command...

    ninefive 評論0 收藏0
  • [Laravel 5.3] Notification 個人理解,及 BearyChat Channe

    摘要:提供了一種全新的發(fā)送通知的方式。個人理解是可以基于某事件操作觸發(fā)一系列的通知任務(wù),而通知方式由通知渠道接管,這樣使得通知或推送邏輯更抽象,更易于管理和重構(gòu)。在之前,我是利用的來完成這一系列通知。使用的配置文件還是原來的,無需重新配置。 Laravel Notification Laravel 5.3 提供了一種全新的發(fā)送通知的方式:Notification 。個人理解是可以基于某事件(...

    Yang_River 評論0 收藏0
  • LaravelLaravel 框架關(guān)鍵技術(shù)解析·讀書筆記(二)

    摘要:框架關(guān)鍵技術(shù)解析讀書筆記二第五章框架應(yīng)用程序根目錄版本默認的框架應(yīng)用程序是符合規(guī)范的,所以相應(yīng)的目錄結(jié)構(gòu)也是基本固定的,不同的目錄加載了功能文件,如果添加了新的目錄,需要在文件中添加規(guī)范的自動加載部分并執(zhí)行命令。 Laravel 框架關(guān)鍵技術(shù)解析·讀書筆記(二) 第五章 框架應(yīng)用程序根目錄(5.1版本) 默認的Laravel框架應(yīng)用程序是符合PSR規(guī)范的,所以相應(yīng)的目錄結(jié)構(gòu)也是基本...

    TIGERB 評論0 收藏0
  • Laravel核心解讀 -- 事件系統(tǒng)

    摘要:對于包含通配符的事件名,會被統(tǒng)一放入數(shù)組中,是用來創(chuàng)建事件對應(yīng)的的如果是監(jiān)聽器是類,去創(chuàng)建監(jiān)聽類創(chuàng)建的時候,會判斷監(jiān)聽對象是監(jiān)聽類還是閉包函數(shù)。對于閉包監(jiān)聽來說,會再包裝一層返回一個閉包函數(shù)作為事件的監(jiān)聽者。 事件系統(tǒng) Laravel 的事件提供了一個簡單的觀察者實現(xiàn),能夠訂閱和監(jiān)聽應(yīng)用中發(fā)生的各種事件。事件機制是一種很好的應(yīng)用解耦方式,因為一個事件可以擁有多個互不依賴的監(jiān)聽器。lar...

    chengjianhua 評論0 收藏0

發(fā)表評論

0條評論

TIGERB

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<