首頁  >  文章  >  後端開發  >  thinkPHP5.0框架整體架構總覽【應用,模組,MVC,驅動,行為,命名空間等】

thinkPHP5.0框架整體架構總覽【應用,模組,MVC,驅動,行為,命名空間等】

不言
不言原創
2018-06-07 11:52:591536瀏覽

這篇文章主要介紹了thinkPHP5.0框架整體架構,簡單介紹了thinkPHP5.0的應用,模組,MVC,驅動,行為,命名空間等概念與基本用法,需要的朋友可以參考下

本文講述了thinkPHP5.0框架整體架構。分享給大家供大家參考,具體如下:

ThinkPHP5.0應用基於MVC(模型-視圖-控制器)的方式來組織。

MVC是一個設計模式,它強制性的使應用程式的輸入、處理和輸出分開。使用MVC應用程式被分成三個核心部件:模型(M)、視圖(V)、控制器(C),它們各自處理自己的任務。

5.0的URL存取受路由決定,如果關閉路由或沒有符合路由的情況下,則是基於:

http://serverName/index.php (或者其它應用入口文件)/模組/控制器/操作/參數/值...

下面的一些概念有必要做下了解,可能在後面的內容中經常會被提及。

入口文件

使用者請求的PHP文件,負責處理一個請求(注意,不一定是URL請求)的生命週期,最常見的入口文件就是index.php,有時也會為了某些特殊的需求而增加新的入口文件,例如給後台模組單獨設定的一個入口文件admin.php或一個控制器程序入口think都屬於入口檔案。

應用程式

應用程式在ThinkPHP中是一個管理系統架構及生命週期的對象,由系統的\think\App類別完成,應用通常在入口檔案中被呼叫和執行,具有相同的應用目錄(APP_PATH)的應用我們認為是同一個應用,但一個應用程式可能存在多個入口檔案。

應用具有自己獨立的設定檔、公有(函數)檔。

模組

一個典型的應用程式是由多個模組組成的,這些模組通常都是應用目錄下面的子目錄,每個模組都自己獨立的設定檔、公共文件和類別庫文件。

5.0支援單一模組架構設計,如果你的應用程式下面只有一個模組,那麼這個模組的子目錄可以省略,並且在應用程式設定檔中修改

'app_multi_module' =>  false,

控制器

每個模組擁有獨立的MVC類別庫及配置文件,一個模組下面有多個控制器負責回應請求,而每個控制器其實就是一個獨立的控制器類別。

控制器主要負責請求的接收,並呼叫相關的模型處理,並最終透過視圖輸出。嚴格來說,控制器不應該過多的介入業務邏輯處理。

事實上,5.0中控制器是可以被跳過的,透過路由我們可以直接把請求調度到某個模型或其他的類別進行處理。

5.0的控制器類別比較靈活,可以無需繼承任何基礎類別庫。

一個典型的Index控制器類別如下:

namespace app\index\controller;
class Index 
{
  public function index()
  {
    return 'hello,thinkphp!';
  }
}

操作

一個控制器包含多個操作(方法),操作方法是一個URL存取的最小單元。

下面是典型的Index控制器的操作方法定義,包含了兩個操作方法:

namespace app\index\controller;
class Index 
{
  public function index()
  {
    return 'index';
  }
  public function hello($name)
  {
    return 'Hello,'.$name;
  }
}

操作方法可以不使用任何參數,如果定義了一個非可選參數,則該參數必須透過使用者請求傳入,如果是URL請求,則通常是$_GET或$_POST方式傳入。

模型

模型類別通常完成實際的業務邏輯和資料封裝,並傳回和格式無關的資料。

模型類別不一定要存取資料庫,而且在5.0的架構設計中,只有進行實際的資料庫查詢操作的時候,才會進行資料庫的連接,是真正的惰性連接。

ThinkPHP的模型層支援多層設計,你可以對模型層進行更細化的設計和分工,例如把模型層分為邏輯層/服務層/事件層等等。

視圖

控制器呼叫模型類別後傳回的資料透過視圖組裝成不同格式的輸出。視圖根據不同的需求,來決定呼叫模板引擎進行內容解析後輸出還是直接輸出。

檢視通常會有一系列的範本檔案對應不同的控制器和操作方法,並且支援動態設定範本目錄。

驅動

系統很多的元件都採用驅動式設計,從而可以更靈活的擴展,驅動類別的位置預設是放入核心類別庫目錄下面,也可以重新定義驅動類別庫的命名空間而改變驅動程式的檔案位置。

行為

#

行为(Behavior)是在预先定义好的一个应用位置执行的一些操作。类似于AOP编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。所以,行为通常是和某个位置相关,行为的执行时间依赖于绑定到了哪个位置上。

要执行行为,首先要在应用程序中进行行为侦听,例如:

// 在app_init位置侦听行为
\think\Hook::listen('app_init');

然后对某个位置进行行为绑定:

// 绑定行为到app_init位置
\think\Hook::add('app_init','\app\index\behavior\Test');

一个位置上如果绑定了多个行为的,按照绑定的顺序依次执行,除非遇到中断。

命名空间

ThinkPHP5采用了PHP的命名空间进行类库文件的设计和规划,并且符合PSR-4的自动加载规范。

相关推荐:

搭建自己的PHP MVC框架

thinkPHP交易详情查询功能

以上是thinkPHP5.0框架整體架構總覽【應用,模組,MVC,驅動,行為,命名空間等】的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn