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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 5. 插件事件 ## 事件說明 事件的定義寫在`插件名稱類`文件里面,方法命名方式以Hook結尾,字母駝峰式命名。 ## 插件能使用的事件 > 2.1.220504版本起插件事件不在使用下劃線調用,但依然支持舊版的下劃線方式 事件名稱插件名稱類使用方式描述參數說明addons\_init 2.1.220504版本起:addonsInitaddonsInitHook插件初始化,這個事件能影響到前臺、后臺,優先級最高-addonMiddlewareaddonMiddlewareHook插件全局中間件,只要訪問任意插件前臺時觸發請求的Request對象addonsBeginaddonsBeginHook插件路由調度前事件,訪問插件控制器時觸發請求的Request對象addonModuleInitaddonModuleInitHook插件控制器初始化前事件,訪問插件控制器時觸發請求的Request對象addonsActionBeginaddonsActionBeginHook插件控制器操作方法執行前事件,訪問插件控制器操作方法時觸發傳入控制器對象與將要操作的方法indexRouteindexRouteHook訪問前臺時,在路由初始化時觸發,無adminRouteadminRouteHook訪問后臺時,在路由初始化時觸發無apiRouteapiRouteHook訪問api時時,在路由初始化時觸發無configInitconfigInitHook訪問前臺或后臺時,站點配置初始化后觸發(前后臺的基礎類)站點配置adminLoginSuccessadminLoginSuccessHook后臺登錄成功后標簽位登錄信息indexHeadindexHeadHook前臺模板頭部標簽位無indexFooterindexFooterHook前臺模板底部標簽位無themeChangethemeChangeHook模板主題切換事件傳入index\_theme,或admin\_themeuploadAfteruploadAfterHook文件上傳后觸發傳入文件信息數組uploadDeluploadDelHook文件刪除后觸發傳入刪除的模型對象addonConfig\_save插件保存配置時觸發(已廢棄)提交的配置表單插件標識ConfigSave插件或模板配置保存時觸發(2.1.220220新增)提交的配置表單,例如你的插件叫:demo, 事件定義為:demoConfigSaveHookapiAuthMiddlewareapiAuthMiddlewareHookAPI權限中間件請求Request對象apiLoginMiddlewareapiLoginMiddlewareHookAPI登錄中間件請求Request對象HttpRunHttpRunHook應用開始標簽位(TP內置)無HttpEndHttpEndHook應用結束標簽位(TP內置)當前響應對象實例RouteLoadedRouteLoadedHook路由加載完成(TP內置)無LogWriteLogWriteHook日志write方法標簽位(TP內置)當前寫入的日志信息## 使用方式 例如插件名稱叫`demo`,在`Demo`插件名稱類里面,若要使用`indexHead`前臺模板頭部事件。這里首先需要模板有放置該標簽事件,可前往默認模板找到head.html文件,即可看到`{:hook("indexHead")}`,當訪問前臺頁面執行到`{:hook("indexHead")}`時就會調用下面的`indexHeadHook`方法。 完整寫法如下 ``` <pre class="calibre16">``` <span class="token"><</span><span class="token">?</span>php declare <span class="token1">(</span>strict_types<span class="token">=</span><span class="token3">1</span><span class="token1">)</span><span class="token1">;</span> namespace addons\demo<span class="token1">;</span> use think\Addons<span class="token1">;</span> class <span class="token6">Demo</span> extends <span class="token6">Addons</span> <span class="token1">{</span> public <span class="token2">function</span> <span class="token6">install</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token2">return</span> <span class="token3">true</span><span class="token1">;</span> <span class="token1">}</span> public <span class="token2">function</span> <span class="token6">uninstall</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token2">return</span> <span class="token3">true</span><span class="token1">;</span> <span class="token1">}</span> <span class="token5">// 前臺模板執行到<head></head>時觸發,通常用于加載JS、CSS達到特定的需求</span> public <span class="token2">function</span> <span class="token6">indexHeadHook</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token5">// 加載js</span> <span class="token2">return</span> <span class="token4">"<script src='/static/main.js'></script>"</span><span class="token1">;</span> <span class="token5">// 或直接渲染視圖,可參考插件視圖</span> <span class="token2">return</span> $this<span class="token">-</span><span class="token">></span><span class="token6">fetch</span><span class="token1">(</span><span class="token4">'index/index'</span><span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` ## 擴展 當我們在寫業務邏輯時,需要自己定義一些事件標簽位來給其他插件實現功能擴展,那么我們可以參考下面來實現。 **1. hook方法** 系統有提供`hook`方法來觸發事件,方法說明: ``` <pre class="calibre16">``` <span class="token5">/** * $event 事件名稱 * $params 傳入參數 * $once = true 表示返回一個結果,$once = false 表示返回全部結果 * $original = true 表示 返回TP trigger原始數據,false - 返回字符串,如果原樣返回數據是數組即會轉換成字符串 */</span> <span class="token6">hook</span><span class="token1">(</span>$event<span class="token1">,</span> $params<span class="token1">,</span> $once<span class="token1">,</span> $original<span class="token1">)</span> ``` ``` **2. 觸發事件** 例如定義觸發`showTest`事件。 ``` <pre class="calibre16">``` <span class="token5">// 控制器觸發,傳入數組</span> <span class="token6">hook</span><span class="token1">(</span><span class="token4">'showTest'</span><span class="token1">,</span> <span class="token1">[</span><span class="token4">'a'</span><span class="token">=</span><span class="token">></span><span class="token4">'測試'</span><span class="token1">]</span><span class="token1">)</span><span class="token1">;</span> <span class="token5">// 模板觸發,傳入數組</span> <span class="token1">{</span><span class="token1">:</span><span class="token6">hook</span><span class="token1">(</span><span class="token4">"showTest"</span><span class="token1">,</span><span class="token1">[</span><span class="token4">'a'</span><span class="token">=</span><span class="token">></span><span class="token4">'測試'</span><span class="token1">]</span><span class="token1">)</span><span class="token1">}</span> <span class="token5">// 接收返回值:輸出原始數據。第四個參數給true即可</span> $arr <span class="token">=</span> <span class="token6">hook</span><span class="token1">(</span><span class="token4">"showTest"</span><span class="token1">,</span><span class="token1">[</span><span class="token4">'a'</span><span class="token">=</span><span class="token">></span><span class="token4">'測試'</span><span class="token1">]</span><span class="token1">,</span><span class="token3">true</span><span class="token1">,</span><span class="token3">true</span><span class="token1">)</span><span class="token1">;</span> ``` ``` > 注意:當有多個插件定義showTest事件時,返回值是數組的,并不建議這樣來使用事件 上面定義了`showTest`觸發事件方法,那么在其他插件就可以定義`showTest`事件來實現擴展,如下 ``` <pre class="calibre20">``` <span class="token"><</span><span class="token">?</span>php declare <span class="token1">(</span>strict_types<span class="token">=</span><span class="token3">1</span><span class="token1">)</span><span class="token1">;</span> namespace addons\demo<span class="token1">;</span> use think\Addons<span class="token1">;</span> class <span class="token6">Demo</span> extends <span class="token6">Addons</span> <span class="token1">{</span> public <span class="token2">function</span> <span class="token6">install</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token2">return</span> <span class="token3">true</span><span class="token1">;</span> <span class="token1">}</span> public <span class="token2">function</span> <span class="token6">uninstall</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token2">return</span> <span class="token3">true</span><span class="token1">;</span> <span class="token1">}</span> <span class="token5">// 對應showTest</span> public <span class="token2">function</span> <span class="token6">showTestHook</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> echo <span class="token4">"測試"</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ```
                  <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>

                              哎呀哎呀视频在线观看