<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 功能強大 支持多語言、二開方便! 廣告
                Lying的部分服務組件、控制器、AR繼承自`lying\service\Service`,所以并不能定義構造函數(因為在`lying\service\Service`構造函數被定義為`final`),但是你可以重寫`init()`來實現。 只要你的類繼承自`lying\service\Service`,那么你就可以為這個類綁定一些事件,我們先來說一說Lying的一些事件: [TOC] ### 控制器事件 控制器基類預定義了兩個事件: ~~~php /** * @var string 方法執行前事件ID */ const EVENT_BEFORE_ACTION = 'beforeAction'; /** * @var string 方法執行后事件ID */ const EVENT_AFTER_ACTION = 'afterAction'; ~~~ 控制器默認綁定了兩個事件觸發的方法: ~~~php //$instance是控制器的實例 $instance->on(self::EVENT_BEFORE_ACTION, [$instance, 'beforeAction']); $instance->on(self::EVENT_AFTER_ACTION, [$instance, 'afterAction']); ~~~ 這些事件會在控制器方法執行前和執行后分別進行調用(僅僅在調度器調度控制器的時候有效,手動實例化控制器不會觸發。 默認觸發執行的是當前控制器的`beforeAction()`方法和`afterAction()`方法。當然,如果你想綁定其他事件,你可以在控制器初始化方法里面定義: ~~~php public function init() { $this->on(self::EVENT_BEFORE_ACTION, $callback); $this->on(self::EVENT_AFTER_ACTION, $callback); } ~~~ > * 控制器事件所綁定的回調函數可接受一個參數,為`lying\event\ActionEvent`實例:`function (\lying\event\ActionEvent $event)`。 > * 事實上所有的時間回調函數都可接受一個參數,為`lying\service\Event`實例,`function (\lying\service\Event $event)`,`lying\event\ActionEvent`也是繼承自`lying\service\Event`。 你可以在控制器回調事件獲取以下參數: ~~~php public function beforeAction(\lying\event\ActionEvent $event) { parent::beforeAction($event); echo $event->action; //執行的方法名稱 } public function afterAction(\lying\event\ActionEvent $event) { parent::afterAction($event); echo $event->action; //執行的方法名稱 echo $event->response; //執行方法返回的結果 } ~~~ ### 數據庫模型事件 如果你的模型繼承了`lying\db\ActiveRecord`,那么你的數據庫模型已經預定義了幾個事件了: ~~~php /** * @var string 插入前觸發的事件ID */ const EVENT_BEFORE_INSERT = 'beforeInsert'; /** * @var string 插入后觸發的事件ID */ const EVENT_AFTER_INSERT = 'afterInsert'; /** * @var string 更新前觸發的事件ID */ const EVENT_BEFORE_UPDATE = 'beforeUpdate'; /** * @var string 更新后觸發的事件ID */ const EVENT_AFTER_UPDATE = 'afterUpdate'; /** * @var string 刪除前觸發的事件ID */ const EVENT_BEFORE_DELETE = 'beforeDelete'; /** * @var string 刪除后觸發的事件ID */ const EVENT_AFTER_DELETE = 'afterDelete'; /** * @var string 插入或更新前觸發的事件ID */ const EVENT_BEFORE_SAVE = 'beforeSave'; /** * @var string 插入或更新后觸發的事件ID */ const EVENT_AFTER_SAVE = 'afterSave'; ~~~ 這些事件并沒有像控制器那樣默認綁定了觸發函數,你可以這樣為一個模型實例綁定觸發函數: ~~~php $user = new User(); $user->on(User::EVENT_BEFORE_INSERT, function(\lying\event\ActiveRecordEvent $event) { echo $event->rows; //執行后受影響的函數,執行失敗為false //你想執行的操作 }); ~~~ 你也可以在模型實例化的時候綁定好事件: ~~~php <?php namespace module\index\model; use lying\db\ActiveRecord; class UserModel extends ActiveRecord { public function init() { $this->on(self::EVENT_BEFORE_INSERT, function (\lying\event\ActiveRecordEvent $event) {}); $this->on(self::EVENT_AFTER_INSERT, [$this, 'afterInsert'], '帶入的參數,可以在回調事件獲取'); } public function afterInsert(\lying\event\ActiveRecordEvent $event) { echo $event->data; //獲取到'帶入的參數,可以在回調事件獲取' } } ~~~ * `on`的第二個參數為`callable`類型。這些綁定的事件會在實例執行特定的操作的時候觸發,事件可以綁定多個,按綁定順序觸發。 * `on`的第三個參數為`mixed`類型。這個參數可以在回調事件的參數中獲取。 * `on`的第四個參數為`bool`類型。是否插入在事件隊列的末尾,默認true,若果為false則插入到事件處理隊列的首位 > * EVENT_BEFORE_INSERT、EVENT_BEFORE_UPDATE、EVENT_BEFORE_DELETE、EVENT_BEFORE_SAVE事件所綁定的回調函數接收到的參數:`$event->rows`為`null`。 > * EVENT_AFTER_INSERT、EVENT_AFTER_UPDATE、EVENT_AFTER_DELETE、EVENT_AFTER_SAVE事件所綁定的回調函數接受一個參數,為執行結果:`$event->rows`為`int`或者`false`。 ### 自定義事件 你可以在已經有的數據庫模型類、控制器類定義其他自定義事件: 1. 定義一個事件ID,但是不能和預定義的事件ID一樣:`const EVENT_EVENTNAME = 'enentId';`。 2. 在要觸發事件的地方寫上事件觸發函數:`$this->trigger($id, $event)`。這里的`$id`就是你定義的事件ID,`$event`就是傳到綁定的方法的參數,為一個`lying\service\Event實例`。 3. 在你需要的地方寫上事件綁定函數`$this->on($id, $callback)`。這里的`$id`就是你定義的事件ID,`$callback`就是你綁定的回調函數。 ### 卸載事件 ~~~php $service->off($id, $callback); ~~~ `$service`為`lying\service\Service`的子類實例,`$id`為事件ID,`$callback`就是你要卸載的回調函數。如果`$callback`放空則表示清空整個事件ID所有的回調函數。 ### 事件執行順序 > * 事件回調函數的執行順序按照綁定的先后順序執行。 > * 如果有一個事件的函數返回了false或者設置`$event->stop = false;` 則后面的事件就都不再執行
                  <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>

                              哎呀哎呀视频在线观看