<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # [thinkphp6事件監聽event-listene](https://www.cnblogs.com/wqy415/p/16148492.html) 事件系統可以看成是行為系統的升級版,相比行為系統強大的地方在于事件本身可以是一個類,并且可以更好的支持事件訂閱者。 事件相比較中間件的優勢是事件比中間件更加精準定位(或者說粒度更細),并且更適合一些業務場景的擴展。例如,我們通常會遇到用戶注冊或者登錄后需要做一系列操作,通過事件系統可以做到不侵入原有代碼完成登錄的操作擴展,降低系統的耦合性的同時,也降低了BUG的可能性。 步驟一:準備登錄入口 ? 首先準備一個登錄入口 ,該入口本地的虛擬路由為 /api/login ``` `class``User``extends``BaseController` `{` `public``function``login()` `{` `//執行登錄操作` `echo``"login_entrance\n"``;` `$user``= \app\common\model\User::find(1)->toArray();` `//登錄成功后的操作,比如可以分配邀請獎勵,寫入登錄日志等` `echo``"login_after\n"``;` `}` `}` ``` 步驟二:創建事件 創建UserLoginAfterEvent事件,并在config/event.php配置文件中進行綁定 ``` `class``UserLoginAfterEvent` `{` `public``$user``;` `public``function``__construct(``$user``)` `{` `$this``->user =``$user``;` `echo``"user_login_after_event\n"``;` `}` `}` ``` ``` `'bind'`?????`=> [` `'UserLoginAfter'``=> \app\common\event\UserLoginAfterEvent::``class` `],` ``` 然后在user/login 方法后面增加觸發事件代碼 ``` `public``function``login()` `{` `//執行登錄操作` `echo``"login_entrance\n"``;` `$user``= \app\common\model\User::find(1)->toArray();` `//登錄成功后的操作,比如可以分配邀請獎勵,寫入登錄日志等` `echo``"login_after\n"``;` `/** 觸發事件 */` `// 通過事件標識` `event(``"UserLoginAfter"``,``$user``);` `// 傳入事件對象實例` `event(``new``UserLoginAfterEvent(``$user``));` `}` ``` 這時執行 /api/login 的輸出結果如下: ``` `login_entrance` `login_after` `user_login_after_event` ``` 經過驗證 此時 使用事件標識觸發 在UserLoginAfterEvent事件中 沒有結果輸出的。 步驟三:創建監聽 創建事件監聽類?UserLoginAfterListener.php,并在config/event.php配置文件中進行綁定 ``` `class``UserLoginAfterListener` `{` `public``function``handle(``$user``)` `{` `// 事件監聽處理` `echo``"user_login_after_listener\n"``;` `}` `}` ``` ``` `'listen'`???`=> [` `'UserLoginAfter'``=> [\app\common\listener\UserLoginAfterListener::``class``]` `],` ``` 這時執行 /api/login 的輸出結果如下: ``` `login_entrance` `login_after` `user_login_after_listener` `user_login_after_event` `user_login_after_listener` ``` 另外在?UserLoginAfterListener 中打印 $user?的結果如下: ``` `^``array``:3 [?``"id"``=> 1?``"username"``=>``"wangqy"`?`"password"``=>``"123456"``]` `^ app\common\event\UserLoginAfterEvent {#88? +user:``array``:3 [???``"id"``=> 1???``"username"``=>``"wangqy"`???`"password"``=>``"123456"`?`]}` ``` 結論 通過上述測試得出的結果如下: 1、使用事件標識來監聽時 是不走定義的事件類的,只有在event方法中傳入事件實例才能夠在事件類進行操作值。 2、通過事件標識來監聽時 ,在監聽類中接受的值,是實際在觸發事件時傳入的參數,而通過事件類實例監聽時,在監聽類中拿到的是事件類實例。 注意: 在進行監聽類綁定時,要注意標識后面的值是數組類型,使用下面這種方式,雖然沒有報錯,但是也不會生效。 ``` `'UserLoginAfter'``=>?\app\common\listener\UserLoginAfterListener::``class` ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看