完全掌握thinkphp的事件綁定、監(jiān)聽和訂閱

本篇文章給大家?guī)砹岁P(guān)于thinkphp的相關(guān)知識(shí),其中主要介紹了事件綁定、監(jiān)聽、訂閱的相關(guān)問題,事件相比較中間件的優(yōu)勢是事件比中間件更加精準(zhǔn)定位,下面一起來看一下,希望對(duì)大家有幫助。

完全掌握thinkphp的事件綁定、監(jiān)聽和訂閱

推薦學(xué)習(xí):《thinkphp

事件是什么

事件相比較中間件的優(yōu)勢是事件比中間件更加精準(zhǔn)定位(或者說粒度更細(xì)),并且更適合一些業(yè)務(wù)場景的擴(kuò)展。例如,我們通常會(huì)遇到用戶注冊或者登錄后需要做一系列操作,通過事件系統(tǒng)可以做到不侵入原有代碼完成登錄的操作擴(kuò)展,降低系統(tǒng)的耦合性的同時(shí),還能完成業(yè)務(wù)的需求。

TP6中事件的使用

官網(wǎng)的解釋,沒有實(shí)例,這里簡單的告訴大家如何使用,會(huì)使用之后再去發(fā)現(xiàn)更多操作

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

1.事件監(jiān)聽

  • 命令行生成監(jiān)聽 php think make:listener UserLogin

一般建議直接在事件定義文件(Event.php)中定義對(duì)應(yīng)事件的監(jiān)聽。

return [     'bind'    =>    [         'UserLogin' => 'appeventUserLogin',         // 更多事件綁定     ],     'listen'  =>    [         'UserLogin'    =>    ['applistenerUserLogin'],         // 更多事件監(jiān)聽     ], ];

2.事件訂閱

  • 命令行php think make:subscribe User
    默認(rèn)會(huì)生成appsubscribeUser類,或者你可以指定完整類名生成。
<?php namespace appsubscribe;  class User {     public function onUserLogin($user)     {         // UserLogin事件響應(yīng)處理     }      public function onUserLogout($user)     {         // UserLogout事件響應(yīng)處理     } }

3.自定義訂閱

如果希望自定義訂閱方式(或者方法規(guī)范),可以定義subscribe方法實(shí)現(xiàn)。

<?php namespace appsubscribe;  use thinkEvent;  class User {     public function onUserLogin($user)     {         // UserLogin事件響應(yīng)處理     }      public function onUserLogout($user)     {         // UserLogout事件響應(yīng)處理     }      public function subscribe(Event $event)     {         $event->listen('UserLogin', [$this,'onUserLogin']);         $event->listen('UserLogout',[$this,'onUserLogout']);     } }

然后在事件定義文件注冊事件訂閱者

return [     'bind'    =>    [         'UserLogin' => 'appeventUserLogin',         // 更多事件綁定     ],     'listen'  =>    [         'UserLogin'    =>    ['applistenerUserLogin'],         // 更多事件監(jiān)聽     ],     'subscribe'    =>    [        'appsubscribeUser',         // 更多事件訂閱     ], ];

事件觸發(fā)

// 觸發(fā)UserLogin事件 用于執(zhí)行用戶登錄后的一系列操作 Event::trigger('UserLogin'); 或者使用助手函數(shù) event('UserLogin');

推薦學(xué)習(xí):《thinkphp

以上就是完全掌握

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享