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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                `ThinkPHP`支持傳統的`MVC`(Model-View-Controller)模式以及流行的`MVVM`(Model-View-ViewModel)模式的應用開發,下面的一些概念有必要做下了解,可能在后面的內容中經常會被提及。 ## 入口文件 用戶請求的PHP文件,負責處理請求(注意,不一定是HTTP請求)的生命周期,入口文件位于`public`目錄下面,最常見的入口文件就是`index.php`,`6.0`支持多應用多入口,你可以給每個應用增加入口文件,例如給后臺應用單獨設置的一個入口文件`admin.php`。 如果開啟自動多應用的話,一般只需要一個入口文件`index.php`。 ## 應用 `6.0`版本提供了對多應用的良好支持,每個應用是一個`app`目錄的子目錄(或者指定的`composer`庫),每個應用具有獨立的路由、配置,以及MVC相關文件,這些應用可以公用框架核心以及擴展。而且可以支持`composer`應用加載。 ## 容器 ThinkPHP使用(對象)容器統一管理對象實例及依賴注入。 容器類的工作由`think\Container`類完成,但大多數情況下我們都是通過應用類(`think\App`類)或是`app`助手函數來完成容器操作,容器中所有的對象實例都可以通過容器標識單例調用,你可以給容器中的對象實例綁定一個對象標識,如果沒有綁定則使用類名作為容器標識。 ## 系統服務 系統服務的概念是指在執行框架的某些組件或者功能的時候需要依賴的一些基礎服務,服務類通常可以繼承系統的`think\Service`類,但并不強制。 你可以在系統服務中注冊一個對象到容器,或者對某些對象進行相關的依賴注入。由于系統服務的執行優先級問題,可以確保相關組件在執行的時候已經完成相關依賴注入。 ## 路由 路由是用于規劃(一般同時也會進行簡化)請求的訪問地址,在訪問地址和實際操作方法之間建立一個路由規則 => 路由地址的映射關系。 ThinkPHP并非強制使用路由,如果沒有定義路由,則可以直接使用“控制器/操作”的方式訪問,如果定義了路由,則該路由對應的路由地址就被不能直接訪問了。一旦開啟強制路由參數,則必須為每個請求定義路由(包括首頁)。 使用路由有一定的性能損失,但隨之也更加安全,因為每個路由都有自己的生效條件,如果不滿足條件的請求是被過濾的。你遠比你在控制器的操作中進行各種判斷要實用的多。 其實路由的作用遠非URL規范這么簡單,還可以實現驗證、權限、參數綁定及響應設置等功能。 ## 控制器 每個應用下面擁有獨立的類庫及配置文件,一個應用下面有多個控制器負責響應請求,而每個控制器其實就是一個獨立的控制器類。 控制器主要負責請求的接收,并調用相關的模型處理,并最終通過視圖輸出。嚴格來說,控制器不應該過多的介入業務邏輯處理。 >[danger] 事實上,控制器是可以被跳過的,通過路由我們可以直接把請求調度到某個模型或者其他的類進行處理。 `ThinkPHP`的控制器類比較靈活,可以無需繼承任何基礎類庫。 一個典型的`Index`控制器類(單應用模式)如下: ~~~ <?php namespace app\controller; class Index { public function index() { return 'hello,thinkphp!'; } } ~~~ > 一般建議繼承一個基礎的控制器,方便擴展。系統默認提供了一個`app\BaseController`控制器類。 ## 操作 一個控制器包含多個操作(方法),操作方法是一個URL訪問的最小單元。 下面是一個典型的`Index`控制器的操作方法定義,包含了兩個操作方法: ~~~ <?php namespace app\controller; class Index { public function index() { return 'index'; } public function hello(string $name) { return 'Hello,'.$name; } } ~~~ 操作方法可以不使用任何參數,如果定義了一個非可選參數,并且不是對象類型,則該參數必須通過用戶請求傳入,如果是URL請求,則通常是通過當前的請求傳入,操作方法的參數支持依賴注入。 ## 模型 模型類通常完成實際的業務邏輯和數據封裝,并返回和格式無關的數據。 >[danger] 模型類并不一定要訪問數據庫,而且在ThinkPHP的架構設計中,只有進行實際的數據庫查詢操作的時候,才會進行數據庫的連接,是真正的惰性連接。 ThinkPHP的模型層支持多層設計,你可以對模型層進行更細化的設計和分工,例如把模型層分為邏輯層/服務層/事件層等等。 模型類通常需要繼承`think\Model`類,一個典型的`User`模型器類如下: ~~~ <?php namespace app\model; use think\Model; class User extends Model { } ~~~ ## 視圖 控制器調用模型類后,返回的數據通過視圖組裝成不同格式的輸出。視圖根據不同的需求,來決定調用模板引擎進行內容解析后輸出還是直接輸出。 視圖通常會有一系列的模板文件對應不同的控制器和操作方法,并且支持動態設置模板目錄。 ## 模板引擎 模板文件中可以使用一些特殊的模板標簽,這些標簽的解析通常由模板引擎負責實現。 新版不再內置`think-template`模板引擎,如果需要使用ThinkPHP官方模板引擎,需要單獨安裝`think-view`模板引擎驅動擴展。 ## 驅動 系統很多的組件都采用驅動式設計,從而可以更靈活的擴展,驅動類的位置默認是放入核心類庫目錄下面,也可以重新定義驅動類庫的命名空間而改變驅動的文件位置。 >[danger] `6.0`版本的驅動采用`Composer`的方式安裝和管理。 ## 中間件 中間件主要用于攔截或過濾應用的`HTTP`請求,并進行必要的業務處理。 >[danger] 新版部分核心功能使用中間件處理,你可以靈活關閉。包括Session功能、請求緩存和多語言功能。 ## 事件 `6.0`已經使用事件機制替代原來的行為和Hook機制,可以在應用中使用事件機制的特性來擴展功能。 此外數據庫操作和模型操作在完成數據操作的回調機制,也使用了事件機制。 ## 助手函數 系統為一些常用的操作提供了助手函數支持。使用助手函數和性能并無直接影響,只是某些時候無法享受IDE自動提醒的便利,但是否使用助手函數看項目自身規范,在應用的公共函數文件中也可以對系統提供的助手函數進行重寫。
                  <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>

                              哎呀哎呀视频在线观看