<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 事件處理 ### 基本用法 > **注意:**有關OctoberCMS本身可用的所有事件的列表,請參閱[api文檔](https://octobercms.com/docs/api/translator/beforeresolve)。 本`Event`類提供了一個簡單的觀察器實現,允許您訂閱和聆聽您的應用程序事件。例如,您可以偵聽用戶何時登錄并更新其上次登錄日期。 ~~~ Event::listen('auth.login', function($user) { $user->last_login = new DateTime; $user->save(); }); ~~~ 該事件可以通過`Event::fire`稱為用戶登錄邏輯一部分的方法使該事件可用,從而使邏輯可擴展。 ~~~ Event::fire('auth.login', [$user]); ~~~ ### [](https://octobercms.com/docs/services/events#events-subscribing)訂閱事件 該`Event::listen`方法主要用于預訂事件,可以在應用程序代碼中的任何位置進行。第一個參數是事件名稱。 ~~~ Event::listen('acme.blog.myevent', ...); ~~~ 第二個參數可以是一個閉包,它指定觸發事件時應發生的情況。閉包可以接受由[fireing事件](https://octobercms.com/docs/services/events#events-firing)提供的一些可選參數。 ~~~ Event::listen('acme.blog.myevent', function($arg1, $arg2) { // Do something }); ~~~ 您也可以傳遞對任何可調用對象或[專用事件類](https://octobercms.com/docs/services/events#using-classes-as-listeners)的引用,并將其代替使用。 ~~~ Event::listen('auth.login', [$this, 'LoginHandler']); ~~~ > **注意**:可調用方法可以選擇指定所有,部分或不指定任何參數。無論哪種方式,事件都不會拋出任何錯誤,除非它指定了太多錯誤。 ### [](https://octobercms.com/docs/services/events#event-registration)在哪里注冊聽眾 最常見的地方是[插件注冊文件](https://octobercms.com/docs/plugin/registration#registration-methods)的`boot`方法。[](https://octobercms.com/docs/plugin/registration#registration-methods) ~~~ class Plugin extends PluginBase { [...] public function boot() { Event::listen(...); } } ~~~ 另外,插件可以在插件目錄中提供一個名為**init.php**的文件,您可以使用該文件放置事件注冊邏輯。例如: ~~~ <?php Event::listen(...); ~~~ 由于這些方法都不是天生的“正確”方法,因此請根據應用程序的大小來選擇適合的方法。 ### [](https://octobercms.com/docs/services/events#subscribing-priority)使用優先級訂閱 訂閱事件時,您也可以將優先級指定為第三個參數。具有較高優先級的偵聽器將首先運行,而具有相同優先級的偵聽器將按訂閱順序運行。 ~~~ // Run first Event::listen('auth.login', function() { ... }, 10); // Run second Event::listen('auth.login', function() { ... }, 5); ~~~ ### [](https://octobercms.com/docs/services/events#subscribing-halting)停止事件 有時您可能希望停止將事件傳播到其他偵聽器。您可以通過`false`從偵聽器返回來使用: ~~~ Event::listen('auth.login', function($event) { // Handle the event return false; }); ~~~ ### [](https://octobercms.com/docs/services/events#wildcard-listeners)通配符偵聽器 注冊事件偵聽器時,可以使用星號指定通配符偵聽器。通配符偵聽器將首先接收觸發的事件名稱,然后接收作為數組傳遞給事件的參數。 以下偵聽器將處理以開頭的所有事件`foo.`。 ~~~ Event::listen('foo.*', function($event, $params) { // Handle the event... }); ~~~ 您可以使用該`Event::firing`方法來確切確定觸發了哪個事件: ~~~ Event::listen('foo.*', function($event, $params) { if (Event::firing() === 'foo.bar') { // ... } }); ~~~ ### [](https://octobercms.com/docs/services/events#events-firing)射擊事件 您可以`Event::fire`在代碼中的任何位置使用該方法以使邏輯可擴展。這意味著其他開發人員,甚至您自己的內部代碼,都可以“鉤住”這一點代碼,并注入特定的邏輯。的第一個參數應為事件名稱。 ~~~ Event::fire('myevent') ~~~ 在插件名稱空間代碼前添加事件名稱總是一個好主意,這樣可以防止與其他插件發生沖突。 ~~~ Event::fire('acme.blog.myevent'); ~~~ 第二個參數是一個值數組,這些值將作為參數傳遞給預訂[該事件的偵聽器](https://octobercms.com/docs/services/events#events-subscribing)。 ~~~ Event::fire('acme.blog.myevent', [$arg1, $arg2]); ~~~ 第三個參數指定事件是否應為[暫停事件](https://octobercms.com/docs/services/events#subscribing-halting),這意味著如果返回“非null”值,則該事件應[停止](https://octobercms.com/docs/services/events#subscribing-halting)。默認情況下,此參數設置為false。 ~~~ Event::fire('acme.blog.myevent', [...], true); ~~~ 如果事件停止,則將捕獲返回的第一個值。 ~~~ // Single result, event halted $result = Event::fire('acme.blog.myevent', [...], true); ~~~ 否則,它將以數組的形式返回所有事件的所有響應的集合。 ~~~ // Multiple results, all events fired $results = Event::fire('acme.blog.myevent', [...]); ~~~ ### [](https://octobercms.com/docs/services/events#event-pass-by-reference)通過引用傳遞參數 在處理或過濾傳遞給事件的值時,可以給變量加上前綴`&`以通過引用傳遞它。這使多個偵聽器可以操縱結果并將其傳遞給下一個。 ~~~ Event::fire('cms.processContent', [&$content]); ~~~ 在偵聽事件時,還需要`&`在閉包定義中使用符號聲明參數。在下面的示例中,`$content`變量將在結果后附加“ AB”。 ~~~ Event::listen('cms.processContent', function (&$content) { $content = $content . 'A'; }); Event::listen('cms.processContent', function (&$content) { $content = $content . 'B'; }); ~~~ ### [](https://octobercms.com/docs/services/events#queued-events)排隊事件 觸發事件可以[與隊列一起](https://octobercms.com/docs/services/queues)推遲。使用此`Event::queue`方法可以“排隊”要觸發的事件,但不能立即將其觸發。 ~~~ Event::queue('foo', [$user]); ~~~ 您可以使用該`Event::flush`方法刷新所有排隊的事件。 ~~~ Event::flush('foo'); ~~~ ### [](https://octobercms.com/docs/services/events#using-classes-as-listeners)使用類作為偵聽器 在某些情況下,您可能希望使用類來處理事件,而不是使用Closure。類事件偵聽器將在[Application IoC容器之外](https://octobercms.com/docs/services/application)進行解析,從而為您提供對偵聽器的依賴項注入的全部功能。 ### [](https://octobercms.com/docs/services/events#event-class-method)訂閱個別方法 事件類可以`Event::listen`像其他方法一樣注冊,將類名作為字符串傳遞。 ~~~ Event::listen('auth.login', 'LoginHandler'); ~~~ 默認情況下,該類`handle`上的方法`LoginHandler`將被調用: ~~~ class LoginHandler { public function handle($data) { // ... } } ~~~ 如果您不希望使用默認`handle`方法,則可以指定應訂閱的方法名稱。 ~~~ Event::listen('auth.login', 'LoginHandler@onLogin'); ~~~ ### [](https://octobercms.com/docs/services/events#event-class-subscribe)訂閱整個課程 事件訂閱者是可以從類本身內部預訂多個事件的類。訂戶應定義一個`subscribe`方法,該方法將傳遞給事件分派器實例。 ~~~ class UserEventHandler { /** * Handle user login events. */ public function userLogin($event) { // ... } /** * Handle user logout events. */ public function userLogout($event) { // ... } /** * Register the listeners for the subscriber. * * @param Illuminate\Events\Dispatcher $events * @return array */ public function subscribe($events) { $events->listen('auth.login', 'UserEventHandler@userLogin'); $events->listen('auth.logout', 'UserEventHandler@userLogout'); } } ~~~ 一旦定義了訂戶,就可以向該`Event::subscribe`方法注冊。 ~~~ Event::subscribe(new UserEventHandler); ~~~ 您也可以使用[Application IoC容器](https://octobercms.com/docs/services/application)解析您的訂戶。為此,只需將您的訂戶名稱傳遞給該`subscribe`方法。 ~~~ Event::subscribe('UserEventHandler'); ~~~ ### [](https://octobercms.com/docs/services/events#event-emitter-trait)事件發射器特征 有時您想將事件綁定到對象的單個實例。您可以通過`October\Rain\Support\Traits\Emitter`在類內部實現特征來使用備用事件系統。 ~~~ class UserManager { use \October\Rain\Support\Traits\Emitter; } ~~~ 此特征提供了一種使用偵聽事件的方法`bindEvent`。 ~~~ $manager = new UserManager; $manager->bindEvent('user.beforeRegister', function($user) { // Check if the $user is a spammer }); ~~~ 該`fireEvent`方法用于引發事件。 ~~~ $manager = new UserManager; $manager->fireEvent('user.beforeRegister', [$user]); ~~~ 這些事件將僅在本地對象上發生,而不是全局上。
                  <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>

                              哎呀哎呀视频在线观看