一、ThinkPHP的認識:
ThinkPHP是一個快速、簡單的基於MVC和面向對象的輕量級PHP開發框架。
二、下載后的目錄結構:
├─ThinkPHP.php 框架入口文件
├─Common 框架公共文件
├─Conf 框架配置文件
├─Extend 框架擴展目錄
├─Lang 核心語言包目錄
├─Lib 核心類庫目錄
│ ├─Behavior 核心行為類庫
│ ├─Core 核心基類庫
│ ├─Driver 內置驅動
│ │ ├─Cache 內置緩存驅動
│ │ ├─Db 內置數據庫驅動
│ │ ├─TagLib 內置標簽驅動
│ │ └─Template 內置模板引擎驅動
│ └─Template 內置模板引擎
└─Tpl 系統模板目錄
注意,框架的公共入口文件ThinkPHP.php是不能直接執行的,該文件只能在項目入口文件中調用才能正常運行。
三、入口文件:
默認入口:public/index.php(實際部署的時候public目錄為你的應用對外訪問目錄)。
引入入口文件:
<?php
require ‘/ThinkPHP框架所在目錄/ThinkPHP.php’;
?>
自動生成項目目錄,目錄結構如下:
├─index.php 項目入口文件
├─Common 項目公共文件目錄
├─Conf 項目配置目錄
├─Lang 項目語言目錄
├─Lib 項目類庫目錄
│ ├─Action Action類庫目錄
│ ├─Behavior 行為類庫目錄
│ ├─Model 模型類庫目錄
│ └─Widget Widget類庫目錄
├─Runtime 項目運行時目錄
│ ├─Cache 模板緩存目錄
│ ├─Data 數據緩存目錄
│ ├─Logs 日志文件目錄
│ └─Temp 臨時緩存目錄
└─Tpl 項目模板目錄
移動修改目錄入口文件的路徑:
<?php
define(‘APP_NAME’,’app’);
define(‘APP_PATH’,’./app/’);
require ’/ThinkPHP框架所在目錄/ThinkPHP.php’;
?>
APP_NAME和APP_PATH分部用於定義項目名和項目目錄,項目名通常就是指項目的目錄名稱。
四、調試模式:
ThinkPHP的運行模式包括調試模式和部署模式,默認情況下是運行在部署模式下面。部署模式下面性能優先,並且盡可能少地拋出錯誤信息,調試模式則以除錯方便優先,關閉任何緩存,而且盡可能多的拋出錯誤信息,所以對性能有一定的影響。
開啟調試模式(開發完后關閉):
<?php
define(‘APP_DEBUG’,TRUE);//開啟調試模式
require ‘/ThinkPHP框架所在目錄/ThinkPHP.php’;
?>
關閉調試模式:
define(‘APP_DEBUG’,false);
五、配置文件:
配置文件位於每個項目目錄的Conf/config.php,采用定義格式為php返回數組的方式。
//項目配置文件
return array{
‘配置參數’ => ‘配置值’,
//更多配置參數
//...
};
注意:
配置值可以支持包括字符串、數字、布爾值和數組在內的數據,通常我們建議配置參數均使用大寫定義。如果有需要,我們還可以為項目定義其他的配置文件。
六、使用控制器:
控制器類的命名規范:模塊名+Action.class.php(模塊名采用駝峰法並且首字母大寫)系統的默認模塊是Index,對應的控制器就是項目目錄下面的Lib/Action/IndexAction.class.php,類名和文件名一致。默認操作是index的一個public方法。
初次生成項目目錄結構的時候,系統已經默認生成了一個默認控制器。
示例代碼:
class IndexAction extends Action {
Public function index(){
Echo ‘hello,world’;
}
}
注意:
控制器必須繼承Action類,一個模塊可以包括多個操作方法。如果你的操作方法是protected或者private類型的話,是無法直接通過URL訪問到該操作的。
七、URL請求
入口文件是項目的單一入口,對項目的所有請求都定向到項目的入口文件,系統會從URL參數中解析當前請求的模塊和操作,我們之前訪問的URL地址是沒有任何參數,因此系統會訪問默認模塊(Index)的默認操作(index),因此下面的訪問和之前是等效的:
http://localhost/app/index.php/Index/index
這種URL模式就是系統默認的PATHINFO模式,不同的URL模式獲取模塊和操作的方法不同。
普通模式:也就是傳統的GET傳參方式來指定當前訪問的模塊和操作,例如:http://localhost/app/?m=module&a=action&var=value
M參數表示模塊
A操作表示操作(模塊和操作的URL參數名稱是可以配置的),后面的表示其他GET參數。
PATHINFO模式:
是系統的默認URL模式,提供了最好的SEO支持,
系統內部已經做了環境的兼容處理,所以能夠支持大多數的主機環境。
對應上面的URL模式,PATHINFO模式下面的URL訪問地址是:
http://localhost/app/index.php/module/action/var/value/
Module(第一參數)表示模塊,
Action(第二參數)表示操作,
可定制方式:例如通過下面的配置:
'URL_PATHINFO_DEPR'=>'-', // 更改PATHINFO參數分隔符
還可支持
http://localhost/app/index.php/module-action-var-value/
的URL訪問。
REWRITE模式:
是在PATHINFO模式的基礎上添加了重寫規則的支持,可以去掉URL地址里面的入口文件index.php,但是需要額外配置WEB服務器的重寫規則。
如果是Apache則需要在入口文件的同級添加.htaccess文件,內容如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
REwriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
下面的URL地址訪問了:
http://localhost/app/module/action/var/value/
兼容模式:
是用於不支持PATHINFO的特殊環境,URL地址是:
http://localhost/app/?s=/module/action/var/value/
兼容模式配合Web服務器重寫規則的定義,可以達到和REWRITE模式一樣的URL效果。
八、視圖
ThinkPHP內置了一個編譯型模板引擎,也支持原生的PHP模板,並且還提供了包括Smarty在內的模板引擎驅動。
和Smarty不同,ThinkPHP在渲染模板的時候如果不指定模板,則會采用系統默認的定位規則,其定義規范是TPL/模塊名/操作名.html,所以,Index模塊的index操作的默認模板文件位於項目目錄下面的Tpl/Index/index.html。
例如:
<html>
<head>
<title>hello {$name}</title>
</head>
<body>
Hello,{$name}!
</body>
</html>
要輸出視圖,必須在控制器方法中進行模板渲染輸出操作,例如:
Class IndexAction extends Action {
public function index(){
$this->name = ‘thinkphp’;//進行模板變量賦值
$this->display();
}
}
display方法中我們沒有指定任何模板,所以按照系統默認的規則輸出Index/index,html模板文件。
接下來,我們在瀏覽器中輸入:http://localhost/app/
瀏覽器中會輸出: hello,thinkPHP!
九、讀取數據
在開始之前,首先需在數據庫thinkphp中創建一個think_data數據表(以mysql數據庫為例):
建表:
CREATE TABLE IF NOT EXISTS ‘think_data’(
‘id’ int(8) unsigned NOT NULL AUTO_INCREMENT,
‘data’ varchar(255) NOT NULL,
PRIMARY KEY (‘id’) //主鍵
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
插入記錄:
INSERT INTO ‘think_data’(‘id’,’data’) VALUES
(1,’thinkphp’),
(2,’php’),
(3,’framework’);
配置連接數據庫相關信息:
//添加數據庫配置信息
‘DB_TYPE’ => ‘mysql’, //數據庫類型
‘DB_HOST’ => ‘localhost’, //服務器地址
‘DB_NAME’ => ‘thinkphp’, //數據名
‘DB_USER’ => ‘root’, //用戶名
‘DB_PWD’ => ‘’, //密碼
‘DB_PORT’ => 3306, //端口
‘DB_PREFIX’ => ‘think_’, //數據表前綴
或采用如下配置:
‘DB_DSN’ => ‘mysql://root@localhost:3306/thinkphp’
注意:
使用DB_DSN方式定義可以簡化配置參數,DSN參數格式為:
數據庫類型://用戶名:密碼@數據庫地址:數據庫端口/數據庫名
如果兩種配置參數同時存在的話,DB_DSN配置參數優先。
修改控制器方法進行添加讀取數據:
Class IndexAction extends Action {
public function index(){
$Data = M(‘Data’); //實例化Data數據模型
$this -> data = $data -> select();
$this -> display();
}
}
這里用到了M函數,是ThinkPHP內置的實例化模型的方法,
使用M方法實例化模型不需要創建對應的模型類。
可理解為:
M();是直接操作底層的Model類,而Model類具備基本的CURD操作方法。
M(‘Data’)實例化后,就可以對think_data數據表(think_是我們在項目配置文件中定義的數據表前綴)進行操作(包括CURD)了。
定義好控制器后,我們修改模板文件,添加數據輸出標簽如下:
<html>
<head>
<title>Select Data</title>
</head>
<body>
<volist name=”data” id=”vo”>
{$vo.id}--{$vo.data}<br/>
</volist>
</body>
</html>
Volist標簽是內置模板引擎用於輸出數據集的標簽。
{$vo.id}和{$vo.data}的用法和Smarty類似,就是用於輸出數據的字段,這里就表示輸出think_data表的id和data字段的值。
訪問路徑:http://localhost/app/
顯示輸出:
Thinkphp
php
Framework
注意:
如果發生錯誤,請檢查你是否開啟了調試模式或者清空Runtime目錄下面的緩存文件。
總結:
在本篇我們學習了ThinkPHP的目錄結構、URL模式,如何創建項目的入口文件和開啟調試模式,以及控制器、模板和模型的基礎認識。