<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國際加速解決方案。 廣告
                # 行為擴展 [上一頁](143.html "上一頁")[下一頁](145.html "下一頁") ### 行為和標簽 行為在新版ThinkPHP的架構里面起著舉足輕重的作用,在系統核心之上,設置了很多標簽擴展位,而每個標簽位置可以依次執行各自的獨立行為。行為擴展就因此而誕生了,而且很多系統功能也是通過內置的行為擴展完成的,所有行為擴展都是可替換和增加的,由此形成了底層框架可組裝的基礎。 系統核心提供的標簽位置包括下面幾個(按照執行順序排列):app\_init應用初始化標簽位path\_infoPATH\_INFO檢測標簽位route\_check路由檢測標簽位app\_begin應用開始標簽位action\_name操作方法名標簽位action\_begin控制器開始標簽位view\_begin視圖輸出開始標簽位view\_template視圖模板解析標簽位view\_parse視圖解析標簽位view\_filter視圖輸出過濾標簽位view\_end視圖輸出結束標簽位action\_end控制器結束標簽位app\_end應用結束標簽位在每個標簽位置,可以配置多個行為定義,行為的執行順序按照定義的順序依次執行。除非前面的行為里面中斷執行了(某些行為可能需要中斷執行,例如檢測機器人或者非法執行行為),否則會繼續下一個行為的執行。 除了這些系統內置標簽之外,開發人員還可以在應用中添加自己的應用標簽,例如我們給應用的公共Action類CommonAction添加一個action_init標簽位。`Class?CommonAction?extends?Action{<br class="calibre5"></br>????Public?function?_initialize(){<br class="calibre5"></br>????????tag('action_init');?//?添加action_init?標簽<br class="calibre5"></br>????}<br class="calibre5"></br>}`注意:tag函數用于設置某個標簽位,可以傳入并且只接受一個參數,如果需要傳入多個參數,請使用數組,該參數為引用傳值,所以只能傳入變量。### 內置行為 新版系統的很多核心功能也是采用行為擴展組裝的,雖然在開發過程中可能感覺不到這種變化,但正是由于這種架構設計的改變,讓新版變得更加靈活和易擴展,這是一個里程碑式的改變,對于滿足項目日益紛繁復雜的需求和定制底層框架提供了更多的方便和可能性。 內置的行為包括下面:行為名稱 說明 對應標簽位置 checkRoute 路由檢測行為,完成內置的路由功能 route\_check LocationTemplate 模板定位行為,完成模板文件自動定位和輸出規則 view\_template ParseTemplate 模板文件解析,并支持第三方模板引擎驅動 view\_parse ShowPageTrace 頁面Trace功能行為,完成頁面Trace功能 view\_end ShowRuntime 運行時間顯示行為,完成運行時間顯示 view\_filter TokenBuild 令牌生成行為,完成表單令牌的自動生成 view\_filter ReadHtmlCache 讀取靜態緩存行為 app\_init WriteHtmlCache 生成靜態緩存行為 view\_filter### 行為擴展 行為擴展首先是定義行為類,然后加入某個標簽位置即可,內置的行為擴展就是一個很好的擴展示例。行為擴展類繼承內置的行為基礎類Behavior即可,類的命名規范是: 行為名稱+Behavior 行為的執行入口方法是run方法,因此行為類只需要run方法具備public訪問權限,入口方法只支持一個參數(可以用數組),并且采用引用方式傳參,因此不需要任何返回值。每個行為可以定義options屬性,該屬性中的參數會自動轉換成單獨配置參數,下面是一個示例:`class?TestBehavior?extends?Behavior?{<br class="calibre5"></br>????//?行為參數定義<br class="calibre5"></br>????protected?$options???=??array(<br class="calibre5"></br>????????'TEST_PARAM'????????=>?false,???//??行為參數?會轉換成TEST_PARAM配置參數<br class="calibre5"></br>????);<br class="calibre5"></br>????//?行為擴展的執行入口必須是run<br class="calibre5"></br>????public?function?run(&$params){<br class="calibre5"></br>????????if(C('TEST_PARAM'))?{<br class="calibre5"></br>????????????echo?'RUNTEST?BEHAVIOR?'.$params;<br class="calibre5"></br>????????}<br class="calibre5"></br>????}`我們把TestBehavior行為擴展類放到項目目錄的Lib/Behavior目錄下面,其中options屬性必須是數組方式定義,而且在行為初始化的同時options屬性中的參數會轉換成全局的配置參數,所以,我們在入口方法里面可以直接使用:`C('TEST_PARAM?')`TEST_PARAM參數是沒有預先定義的,行為的options屬性里面提供的參數只是一個初始值,所有的參數我們可以在項目配置文件中重新定義。例如,上面的Test行為如果要執行,我們需要在項目配置文件中添加下面的配置:`'TEST_PARAM'????????=>true`### 行為調用 定義了一個行為擴展之后,系統提供了三種方式可以調用行為: 一、添加到行為配置文件 為了執行Test行為,我們在這里把Test行為加入app_end 標簽位置,在項目配置目錄中添加tags.php文件,在其中添加下面代碼:`return?array(<br class="calibre5"></br>????'app_end'=>array('Test'),?//?在app_end?標簽位添加Test行為<br class="calibre5"></br>);`tags文件是項目的行為定義文件,在這個文件中可以給每個標簽位置添加項目自己的擴展行為,當然你也可以添加到應用自己的標簽位,例如,我們可以把Test行為添加到前面項目自己定義的action_init標簽位置:`return?array(<br class="calibre5"></br>????'action_init'=>array('Test'),?//?在action_init?標簽位添加Test行為<br class="calibre5"></br>);`應用行為的定義沒有限制,你甚至可以把同一個行為放到多個標簽位置執行多次,例如:`return?array(<br class="calibre5"></br>????'app_begin'=>array('Test'),?//?在app_begin?標簽位添加Test行為<br class="calibre5"></br>????'app_end'=>array('Test'),?//?在app_end?標簽位添加Test行為<br class="calibre5"></br>);`默認情況下應用行為擴展會并入系統行為擴展一起執行,也就是說如果系統的行為定義中app_end標簽中已經定義了其他行為,會首先執行系統行為擴展,然后再執行應用行為擴展,如果你希望項目的行為擴展完全替換系統的行為擴展,可以使用:`return?array(<br class="calibre5"></br>????'app_end'=>array('Test','_overlay'=>1),<br class="calibre5"></br>);`表示app_end標簽位用定義的應用行為完全替換該位置的系統行為,也就是說即使系統標簽在app_end定義了其他的系統行為也不會被執行,但是必須注意,行為的命名不要和系統行為一樣。 二、函數方式動態定義 除了定義tags行為配置文件之外,系統還提供了動態添加行為到標簽位的方法,例如我們可以使用下面的方式添加Test行為到app_end標簽位,而無需在tags文件中添加定義: add_tag_behavior('app_end','Test'); 表示把Test行為添加到app_end標簽位的最后,你可以把這個代碼放到項目的公共函數文件中甚至直接放到行為類的最后(如果你確定這個行為擴展只有你的項目會用到的話)。 應用行為擴展類除了放到項目類庫的Behavior目錄外, 還可以放到系統的行為擴展目錄Extend/Behavior/,行為類在執行過程中會自動加載。 三、不放入標簽直接執行 有時候,行為的調用不一定要放到標簽才能調用,如果需要的話,我們可以在控制器中直接調用行為。例如,我們可以把用戶權限檢測封裝成一個行為類,例如:`class?AuthCheckBehavior?extends?Behavior?{<br class="calibre5"></br>????//?行為參數定義<br class="calibre5"></br>????protected?$options???=??array(<br class="calibre5"></br>????'USER_AUTH_ON'????????=>false,???//??是否開啟用戶認證<br class="calibre5"></br>????'USER_AUTH_ID'????????=>?'user_id',???//??定義用戶的id為權限認證字段<br class="calibre5"></br>????);<br class="calibre5"></br>????//?行為擴展的執行入口必須是run<br class="calibre5"></br>????public?function?run(&$return){<br class="calibre5"></br>????????if(C('USER_AUTH_ON?'))?{<br class="calibre5"></br>????????????//?進行權限認證邏輯?如果認證通過?$return?=?true;<br class="calibre5"></br>????????????//?否則用halt輸出錯誤信息<br class="calibre5"></br>????????}<br class="calibre5"></br>????}`定義了AuthCheck行為后,然后在_initialize方法中直接用下面的方式調用:`B('AuthCheck');`注意:因為這種方式的行為調用需要在相關位置添加代碼,所以一般只有在應用代碼才直接使用B方法調用。 [上一頁](143.html "上一頁")[下一頁](145.html "下一頁")
                  <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>

                              哎呀哎呀视频在线观看