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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## 引用類庫 ``` use think\Hook; use think\Loader; use think\Config; ``` ## 定義插件目錄 ``` define('ADDON_PATH', ROOT_PATH . 'addons' . DS); // DS是/ ``` ## 注冊類的根命名空間 ``` Loader::addNamespace('addons', ADDON_PATH); ``` ## 如果插件目錄不存在則創建 ``` if(!is_dir(ADDON_PATH)){ @mkdir(ADDON_PATH, 0777, true); } ``` > mkdir(path,mode,recursive) > 如果成功該函數返回 TRUE,如果失敗則返回 FALSE。 > 參數一:path必需。規定要創建的目錄的名稱。 > 參數二:mode可選。規定權限。默認是 0777(允許全局訪問)。 > 參數三:recursive可選。規定是否設置遞歸模式。(PHP 5 中新增的) ## 處理插件鉤子 ``` /** * 處理插件鉤子 * @param [string] $hook [鉤子名稱] * @param array $params [傳入參數] * @return [void] */ function hook($hook, $params=[]){ Hook::listen($hook, $params); //監聽標簽(鉤子)的行為 } ``` > 函數功能:監聽某個鉤子,該鉤子上掛載某個插件 ## 自動加載鉤子的配置 > 文件名:composer.json > 代碼: ``` { "name": "cmsaddons/think-addons", "description": "The ThinkPHP5 Addons Package", "license": "Apache-2.0", "authors": [ { "name": "lyc", "email": "lyc@studyfox.cn" } ], "autoload": { "psr-4": { "think\\": "src" }, "files": [ "src/common.php" ] } } ``` > PSR是PHP Standards Recommendation的簡稱,制定的代碼規范,簡稱PSR,是代碼開發的事實標準。 > PSR-4使代碼更加規范,能夠滿足面向package的自動加載,它規范了如何從文件路徑自動加載類,同時規范了自動加載文件的位置。 ## autoload\_psr4.php ``` <?php // autoload_psr4.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'think\\testing\\' => array($vendorDir . '/topthink/think-testing/src'), 'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'), 'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'), 'think\\' => array($vendorDir . '/cmsaddons/think-addons/src'), ); ``` ## autoload\_files.php ``` <?php // autoload_files.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', '1cfd2761b63b0a29ed23657ea394cb2d' => $vendorDir . '/topthink/think-captcha/src/helper.php', '72c97b53391125cae04082a81029f42d' => $vendorDir . '/topthink/think-testing/src/config.php', 'ddc3cd2a04224f9638c5d0de6a69c7e1' => $vendorDir . '/cmsaddons/think-addons/src/common.php', ); ``` ## 插件掛載到鉤子上 ``` Hook::add('',''); //兩個參數,鉤子名,插件名 ``` ## TP系統內置鉤子 ``` app_init 應用初始化標簽位 app_begin 應用開始標簽位 module_init 模塊初始化標簽位 action_begin 控制器開始標簽位 view_filter 視圖輸出過濾標簽位 app_end 應用結束標簽位 response_end 輸出結束標簽位(V5.0.1+) log_write 日志write方法標簽位 ``` ## 初始化行為,系統內置鉤子 ``` Hook::add('action_begin',function(){ $data = cache('hooks'); if(empty($data)){ //首頁獲取配置中的插件 $addons = (array)Config::get('addons'); // 初始化鉤子 foreach ($addons as $key => $value) { if(is_string($value)){ $value = explode(',',$value); }else{ $value = (array)$value; } // 最終需要的效果 // Hook::add('bookhook','\addons\book\Book'); $addons[$key] = array_map('get_addon_class', $value); //array_map 將函數作用到數組中的每個值上 Hook::add($key,$addons[$key]); // 動態添加插件到某個鉤子上 } cache('hooks',$addons); }else{ Hook::import($data,false); //批量導入插件 } }); ``` ## 獲取插件類的類名 ``` /** * 獲取插件類的類名 * @param [type] $name 插件名 * @param string $type [命名空間類型] * @param [type] $class [插件類名] * @return [string] */ function get_addon_class($name, $type = 'hook', $class = null){ //parseName轉換命名格式 ,駝峰命名 book=>book GuestBook => guest_book,后面的參數1是首字母大寫 $class = Loader::parseName(is_null($class) ? $name : $class, 1); switch($type){ case 'controller': $namespace = "\\addons\\" . $name . "\\controller\\" . $class; break; default: $namespace = "\\addons\\" . $name . "\\" . $class; } // 當一個類處于某個命名空間下時,class_exists必須補全命名空間 return class_exists($namespace) ? $namespace : ''; } ```
                  <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>

                              哎呀哎呀视频在线观看