First
什么是ThinkPHP?
ThinkPHP是一個(gè)快速、兼容而且簡(jiǎn)單的輕量級(jí)國(guó)產(chǎn)PHP開(kāi)發(fā)框架,誕生于2006年初,原名FCS,2007年元旦正式更名為ThinkPHP,遵循Apache2開(kāi)源協(xié)議發(fā)布,從Struts結(jié)構(gòu)移植過(guò)來(lái)并做了改進(jìn)和完善,同時(shí)也借鑒了國(guó)外很多優(yōu)秀的框架和模式,使用html' target='_blank'>面向?qū)ο?/u>的開(kāi)發(fā)結(jié)構(gòu)和MVC模式,融合了Struts的思想和TagLib(標(biāo)簽庫(kù))、RoR的ORM映射和ActiveRecord模式。
什么是MVC模式呢?
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯。MVC被獨(dú)特的發(fā)展起來(lái)用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中。
為什么要使用ThinkPHP,他到底有什么好處呢?
對(duì)于個(gè)人開(kāi)發(fā)來(lái)說(shuō):
夠安全:大家在自己寫項(xiàng)目的時(shí)候,幾乎所有的內(nèi)容都需要自己去寫,過(guò)程繁瑣漫長(zhǎng),而且個(gè)人寫出來(lái)的項(xiàng)目之中,必定是漏洞百出。可能自己看不出來(lái),但是如果放在網(wǎng)上,就極易被人發(fā)現(xiàn)漏洞。然后框架作為一套已經(jīng)在市面上成熟運(yùn)用很久的解決方案,其間的安全性是很有保障的。
效率高:因?yàn)榭蚣芤呀?jīng)把很多工具幫你做好了,到時(shí)需要的時(shí)候只需拿起用就好,大大提高了項(xiàng)目開(kāi)發(fā)的效率,如果自己做架構(gòu),所有的東西都需要你自己來(lái)寫。
當(dāng)然有人會(huì)說(shuō),我以前寫過(guò),可以直接拿過(guò)來(lái)用,但是自己寫的東西可能通用性并不高,甚至可能最后會(huì)出現(xiàn)很多無(wú)法找到根源的bug,這是特別拖項(xiàng)目進(jìn)度的。
夠穩(wěn)定:各部件之間有條不紊,在不同程度上都能夠流暢運(yùn)行。相比于自己的架構(gòu),可以在更多情況時(shí)保持穩(wěn)定運(yùn)行。
對(duì)于公司來(lái)說(shuō):
團(tuán)隊(duì)協(xié)作能力強(qiáng):提供統(tǒng)一的編碼規(guī)范和模式,團(tuán)隊(duì)協(xié)作很方便。
低培訓(xùn)成本:使用通用的框架,可以直接關(guān)注業(yè)務(wù)邏輯,不需要培訓(xùn)就可以直接去公司上手工作。
去技術(shù)人員化:防止某些核心技術(shù)人員離職導(dǎo)致項(xiàng)目開(kāi)發(fā)停滯。
學(xué)習(xí)ThinkPHP的要求:有上進(jìn)心,可以努力的學(xué)習(xí)原生PHP。越熟悉原生,那么就可以越靈活的使用框架做開(kāi)發(fā)。而且當(dāng)你需要一些TP所不支持的功能時(shí),你完全可以自己寫上。
Second
這玩意該怎么玩
一、獲取Thinkphp
登陸官方網(wǎng)站:http://www.thinkVeVb.com/ 獲取。
**這個(gè)網(wǎng)站中也有許多教程和代碼,大家可以自行查看。**
下完之后,就會(huì)發(fā)現(xiàn)期內(nèi)有這幾個(gè)文件。
www WEB部署目錄(或者子目錄)├─index.php 入口文件├─README.md README文件├─composer.json Composer定義文件├─Application 應(yīng)用目錄├─Public 資源文件目錄└─ThinkPHP 框架目錄
入口文件
在開(kāi)始之前,你需要一個(gè)Web服務(wù)器和PHP運(yùn)行環(huán)境,如果你暫時(shí)還沒(méi)有,我們推薦使用集成開(kāi)發(fā)環(huán)境WAMPServer(是一個(gè)集成了Apache、PHP和MySQL的開(kāi)發(fā)套件,而且支持多個(gè)PHP版本、MySQL版本和Apache版本的切換)來(lái)使用ThinkPHP進(jìn)行本地開(kāi)發(fā)和測(cè)試。
3.2版本開(kāi)始框架自帶了一個(gè)應(yīng)用入口文件,默認(rèn)內(nèi)容如下:
define('APP_PATH','./Application/');require './ThinkPHP/ThinkPHP.php';
打開(kāi)入口文件之后就會(huì)出現(xiàn)一個(gè)界面,這就說(shuō)明Thinkphp安裝成功了。
打開(kāi)之后在目錄下會(huì)智能的生成目錄:
Application├─Common 應(yīng)用公共模塊│ ├─Common 應(yīng)用公共函數(shù)目錄│ └─Conf 應(yīng)用公共配置文件目錄├─Home 默認(rèn)生成的Home模塊│ ├─Conf 模塊配置文件目錄│ ├─Common 模塊函數(shù)公共目錄│ ├─Controller 模塊控制器目錄│ ├─Model 模塊模型目錄│ └─View 模塊視圖文件目錄├─Runtime 運(yùn)行時(shí)目錄│ ├─Cache 模版緩存目錄│ ├─Data 數(shù)據(jù)目錄│ ├─Logs 日志目錄│ └─Temp 緩存目錄模塊設(shè)計(jì)
配置
配置
每個(gè)應(yīng)用模塊都有獨(dú)立的配置文件(位于模塊目錄的Conf/config.php),配置文件的定義格式支持PHP/JSON/YAML/INI/XML等方式,默認(rèn)采用PHP數(shù)組定義,例如:
// 配置文件return array( '配置參數(shù)' => '配置值', // 更多配置參數(shù) //...);
如果你需要為各個(gè)模塊定義公共的配置文件,可以在公共模塊中定義(通常位于 Common/Conf/config.php),定義格式是一樣。
一旦有需要,我們就可以在配置文件中添加相關(guān)配置項(xiàng)目。通常我們提到的添加配置項(xiàng)目,就是指在項(xiàng)目配置文件中添加:
'配置參數(shù)'=>'配置值',
配置值可以支持包括字符串、數(shù)字、布爾值和數(shù)組在內(nèi)的數(shù)據(jù),通常我們建議配置參數(shù)均使用大寫定義。
如果有需要,我們還可以為項(xiàng)目定義其他類型的配置文件,如果要使用其他格式的配置文件,可以在入口文件中定義CONF_EXT常量即可,例如:
define('CONF_EXT','.ini');
這樣,模塊的配置文件就變成了 Conf/config.ini,定義格式如下:
DEFAULT_MODULE = Index ;默認(rèn)模塊URL_MODEL = 2 ;URL模式
URL請(qǐng)求
ThinkPHP采用單一入口模式訪問(wèn)應(yīng)用,對(duì)應(yīng)用的所有請(qǐng)求都定向到應(yīng)用的入口文件,系統(tǒng)會(huì)從URL參數(shù)中解析當(dāng)前請(qǐng)求的模塊、控制器和操作,下面是一個(gè)標(biāo)準(zhǔn)的URL訪問(wèn)格式:
http://serverName/index.php/模塊/控制器/操作
如果我們直接訪問(wèn)入口文件的話,由于URL中沒(méi)有模塊、控制器和操作,因此系統(tǒng)會(huì)訪問(wèn)默認(rèn)模塊(Home)下面的默認(rèn)控制器(Index)的默認(rèn)操作(index),因此下面的訪問(wèn)是等效的:
http://serverName/index.phphttp://serverName/index.php/Home/Index/index
這種URL模式就是系統(tǒng)默認(rèn)的PATHINFO模式,不同的URL模式獲取模塊和操作的方法不同,ThinkPHP支持的URL模式有四種:普通模式、PATHINFO、REWRITE和兼容模式。
1 普通模式
普通模式也就是使用傳統(tǒng)的GET傳參方式來(lái)指定當(dāng)前訪問(wèn)的模塊、控制器和操作,例如:
http://localhost/?m=home&c=index&a=hello&name=thinkphp
m參數(shù)表示模塊,c表示控制器,a表示操作(當(dāng)然,這些參數(shù)名是可以配置的),后面的表示其他GET參數(shù)。
默認(rèn)值可以不傳,因此下面的URL訪問(wèn)是和上面的等效:
http://localhost/?a=hello&name=thinkphp
2 PATHINFO模式
PATHINFO模式是系統(tǒng)的默認(rèn)URL模式,提供了最好的SEO支持,系統(tǒng)內(nèi)部已經(jīng)做了環(huán)境的兼容處理,所以能夠支持大多數(shù)的主機(jī)環(huán)境。
對(duì)應(yīng)上面的URL模式,PATHINFO模式下面的URL訪問(wèn)地址是:
http://localhost/index.php/home/index/hello/name/thinkphp/
PATHINFO地址的前三個(gè)參數(shù)分別表示模塊/控制器/操作。
PATHINFO模式下面,也可以用普通模式的參數(shù)方式傳入?yún)?shù),例如:
http://localhost/index.php/home/index/hello?name=thinkphp
PATHINFO模式下面,URL參數(shù)分隔符是可定制的,例如,通過(guò)下面的配置:
'URL_PATHINFO_DEPR'=>'-',// 更改PATHINFO參數(shù)分隔符
我們可以支持下面的URL訪問(wèn):
http://localhost/index.php/home-index-hello-name-thinkphp
3 REWRITE模式
REWRITE模式是在PATHINFO模式的基礎(chǔ)上添加了重寫規(guī)則的支持,可以去掉URL地址里面的入口文件index.php,但是需要額外配置WEB服務(wù)器的重寫規(guī)則。
如果是Apache則需要在入口文件的同級(jí)添加.htaccess文件,內(nèi)容如下:
<IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]</IfModule>
接下來(lái)就可以使用下面的URL地址訪問(wèn)了
http://localhost/home/index/hello/name/thinkphp/
4 兼容模式
兼容模式是用于不支持PATHINFO的特殊環(huán)境,URL地址是:
http://localhost/?s=/home/index/hello/name/thinkphp
兼容模式配合Web服務(wù)器重寫規(guī)則的定義,可以達(dá)到和REWRITE模式一樣的URL效果。
視圖
ThinkPHP內(nèi)置了一個(gè)編譯型模板引擎,也支持原生的PHP模板,并且還提供了包括Smarty在內(nèi)的模板引擎驅(qū)動(dòng)。和Smarty不同,ThinkPHP在渲染模板的時(shí)候如果不指定模板,則會(huì)采用系統(tǒng)默認(rèn)的定位規(guī)則,其定義規(guī)范默認(rèn)是模塊目錄下面的 View/控制器名/操作名.html,所以,Index模塊的hello操作的默認(rèn)模板文件位于Home模塊目錄下面的View/Index/hello.html,我們添加模板內(nèi)容如下:
<html><head><title>hello {$name}</title></head><body> hello, {$name}!</body></html>
要輸出視圖,必須在控制器方法中進(jìn)行模板渲染輸出操作,例如:
<?phpnamespace HomeController;use ThinkController;class IndexController extends Controller { public function hello($name='thinkphp'){ $this->assign('name',$name); $this->display(); }}
display方法中我們沒(méi)有指定任何模板,所以按照系統(tǒng)默認(rèn)的規(guī)則輸出了Index/hello.html模板文件。
接下來(lái),我們?cè)?a href='http://www.survivalescaperooms.com/tag/liulanqi_7527_1.html' target='_blank'>瀏覽器訪問(wèn)輸出:
hello,thinkphp!
讀取數(shù)據(jù)
在開(kāi)始之前,我們首先在數(shù)據(jù)庫(kù)thinkphp中創(chuàng)建一個(gè)think_data數(shù)據(jù)表(以mysql數(shù)據(jù)庫(kù)為例):
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');
也可以直接在phpmyadmin中添加。
如果我們需要讀取數(shù)據(jù)庫(kù)中的數(shù)據(jù),就需要在模塊配置文件中添加數(shù)據(jù)庫(kù)連接信息如下:
// 添加數(shù)據(jù)庫(kù)配置信息'DB_TYPE'=>'mysql',// 數(shù)據(jù)庫(kù)類型'DB_HOST'=>'127.0.0.1',// 服務(wù)器地址'DB_NAME'=>'thinkphp',// 數(shù)據(jù)庫(kù)名'DB_USER'=>'root',// 用戶名'DB_PWD'=>'',// 密碼'DB_PORT'=>3306,// 端口'DB_PREFIX'=>'think_',// 數(shù)據(jù)庫(kù)表前綴'DB_CHARSET'=>'utf8',// 數(shù)據(jù)庫(kù)字符集
接下來(lái),我們修改下控制器方法,添加讀取數(shù)據(jù)的代碼:
namespace HomeController;use ThinkController;class IndexController extends Controller{ public function index(){ $Data = M('Data');// 實(shí)例化Data數(shù)據(jù)模型 $result = $Data->find(1); $this->assign('result',$result); $this->display(); }}
這里用到了M函數(shù),是ThinkPHP內(nèi)置的實(shí)例化模型的方法,而且用M方法實(shí)例化模型不需要?jiǎng)?chuàng)建對(duì)應(yīng)的模型類,你可以理解為M方法是直接在操作底層的Model類,而Model類具備基本的CURD操作方法。
M(‘Data’) 實(shí)例化后,就可以對(duì)think_data數(shù)據(jù)表(think_ 是我們?cè)陧?xiàng)目配置文件中定義的數(shù)據(jù)表前綴)進(jìn)行操作(包括CURD)了,M函數(shù)的用法還有很多,我們以后會(huì)深入了解。
定義好控制器后,我們修改模板文件,添加數(shù)據(jù)輸出標(biāo)簽如下:
<html><head><title></title></head><body>{$result.id}--{$result.data}</body></html>
模板標(biāo)簽的用法和Smarty類似,就是用于輸出數(shù)據(jù)的字段,這里就表示輸出think_data表的id和data字段的值。
我們?cè)L問(wèn)會(huì)輸出:
1--thinkphp
如果發(fā)生錯(cuò)誤,檢查你是否開(kāi)啟了調(diào)試模式或者清空Runtime目錄下面的緩存文件。
綜上,就是ThinkPHP比較基礎(chǔ)的內(nèi)容了。
最后,有問(wèn)題,又不會(huì)的查手冊(cè),看視頻。
http://www.kancloud.cn/thinkphp/thinkphp_quickstart/2138
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選