快速上手ThinkPHP 5.0

作者:陳中舒
時間:2017年5月11日

ThinkPHP 5.0的安裝

方式一:官網(wǎng)下載

官網(wǎng)地址:http://thinkphp.cn

方式二:git安裝

  1. 首先Clone項目倉庫:
    git clone https://github.com/top-think/think project_name

  2. 然后再切換到項目文件夾(/project_name),安裝核心框架
    git clone https://github.com/top-think/framework thinkphp

  3. 后續(xù)需要更新框架時,只要切換到thinkphp文件夾并執(zhí)行
    git pull https://github.com/top-think/framework

運行ThinkPHP項目

  • 在本地環(huán)境運行ThinkPHP項目有兩種方式:
  1. 在計算機上搭建Apache服務(wù)器,將項目文件夾放到Apache中運行
  2. 在安裝php環(huán)境的機器上執(zhí)行路由命令,自建服務(wù)器環(huán)境
  • 在此使用第一種方法件已,第二中方法占不討論滥酥。
  • 在瀏覽器上訪問入口文件懒棉,訪問項目:http://localhost/project_name/public/index.php

配置數(shù)據(jù)庫

  • 項目文件夾下有很多子文件夾竖哩,其中application文件夾存放的就是我們的業(yè)務(wù)代碼,所以在入門的時候幾乎只涉及到這個文件夾的內(nèi)容战虏。https://github.com/top-think/framework

  • 在開始制作項目前我們先配置數(shù)據(jù)庫,用編輯器打開 database.php党涕,修改數(shù)據(jù)庫名稱烦感、用戶名和密碼就可以了。

'hostname'        => 'localhost',
'database'        => 'test',
'username'        => 'root',
'password'        => '123456',

了解目錄的結(jié)構(gòu)

  • application文件夾的目錄結(jié)構(gòu)是這樣的
+ index //Index模塊
    + controller //控制器
    + model //模型
    + view //視圖
    - .htaccess
    - command.php //命令行工具配置
    - common.php //應(yīng)用公共函數(shù)
    - config.php //應(yīng)用公共配置
    - database.php //數(shù)據(jù)庫配置
    - route.php //路由配置
    - tags.php //應(yīng)用行為擴展定義
  • Index是系統(tǒng)為我們已經(jīng)創(chuàng)建好的默認模塊膛堤,我們還能為應(yīng)用創(chuàng)建不同的模塊手趣,比如說后臺Admin模塊。
  • 從模塊文件夾的結(jié)構(gòu)我們明顯地看出一個MVC的架構(gòu)肥荔,而接下來我們要做的就是創(chuàng)建第一個控制器绿渣,模型和視圖。

創(chuàng)建第一個控制器

  • 打開controller文件夾我們可以發(fā)現(xiàn)系統(tǒng)已經(jīng)為我們創(chuàng)建了Index控制器燕耿,這也是我們?yōu)槭裁丛陧椖縿?chuàng)建完成后就可以通過瀏覽器訪問的原因中符,在這里,我們創(chuàng)建一個新的控制器——Test控制器誉帅,我們在controller文件夾新建一個test.php文件淀散。

  • test.php 代碼如下

namespace app\index\controller;

class Test {
    public function index(){
        return 'Hello World!';
    }
}
  • namespace為這段代碼劃定了命名空間,避免了模塊間和類庫間的命名沖突蚜锨。

  • index()是Test控制器的一個方法档插,當(dāng)我們在通過URL訪問時沒有指定訪問控制器的哪一個方法,就會默認訪問index方法踏志。

  • 當(dāng)然也可以為控制器添加初始化方法 _initialize()阀捅,它會在控制器調(diào)用方法時前被調(diào)用。

  • 控制器一般不需要任何輸出针余,直接return數(shù)據(jù)就可以了饲鄙。

  • 現(xiàn)在我們訪問 http://localhost/project_name/public/index.php/Index/Test/index 可以發(fā)現(xiàn)頁面上輸出了 Hello World!

  • 這里你應(yīng)該就發(fā)現(xiàn)了URL的規(guī)律了凄诞,在index.php后面加上/模塊名/控制器名/方法名就可以調(diào)用相應(yīng)的方法了。

創(chuàng)建第一個視圖

在服務(wù)器上展示一個網(wǎng)頁

  • 在傳統(tǒng)的PHP中忍级,我們很容易就習(xí)慣把html和標(biāo)簽和php語句混到一起帆谍。而在MVC結(jié)構(gòu)中,我們要把展現(xiàn)在瀏覽器上的部分和業(yè)務(wù)邏輯隔離開來轴咱,使得項目的可維護性更高汛蝙。
  • ThinkPHP 5.0沒有為我們建立視圖文件夾,我們在index模塊文件夾下建立一個view文件夾朴肺,然后在view文件夾下建立一個與控制器同名的Test文件夾窖剑,當(dāng)控制器Test需要調(diào)用模板時,會在/index/view/Test中尋找戈稿。
  • 這里我們在Test下創(chuàng)建一個index.html文件:
<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>

<body>
  <h1>Hello World!</h1>
</body>
</html>
  • 然后我們修改控制器的代碼西土,引入think\View命名空間,并創(chuàng)建一個View的實例鞍盗。
namespace app\index\controller;

use think\View;

class Test {

    public function index(){
        $view=new View();
        return $view->fetch('index');
    }

}
  • View類中的fetch方法會找到此模塊中view文件夾下同名的Test文件夾需了,并根據(jù)參數(shù)找到index.html文件,將它渲染出來般甲,這時訪問
    http://localhost/project_name/public/index.php/Index/Test/index可以看到網(wǎng)頁已經(jīng)顯示出來了肋乍。

  • 當(dāng)然,如果方法和模板同名的話敷存,就可以省略掉這個參數(shù)了墓造,所以在這里
    return $view->fetch('index');
    可以寫成
    return $view->fetch();

將變量輸出到模板

  • 我們需要把控制器中處理后的數(shù)據(jù)輸出到模板上,這時只要把變量綁定到$view對象成為它的屬性锚烦,就可以在模板中用花括號中將它輸出了滔岳。
    /index/controller/Test.php
<?php

namespace app\index\controller;

use think\View;

class Test {

    public function index(){
        
        $view=new View();
        $view->name='I love ThinkPHP';

        return $view->fetch();
    }

}

/index/view/Test/index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>

<body>
  <h1>{$name}</h1>
</body>

</html>
  • 刷新頁面,即可看到效果挽牢。

  • 在視圖中谱煤,可以用點運算符(.)來訪問數(shù)組的元素。
    /index/controller/Test.php

<?php

namespace app\index\controller;

use think\View;

class Test {

    public function index(){
        
        $view=new View();
        $view->person=array("name"=>"Tom","age"=>"23");

        return $view->fetch();
    }

}

/index/view/Test/index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>

<body>
  <h1>{$person.name}</h1>
  <h1>{$person.age}</h1>
</body>

</html>
  • 當(dāng)然也可以使用 {$person["name"]}{$person["age"]}

訪問數(shù)據(jù)庫

  • 在之前禽拔,我們已經(jīng)配置好了數(shù)據(jù)庫刘离,假定我們現(xiàn)在有一張student表(id為主鍵)
    | id | name | age |
    | -- | ----- | --- |
    | 1 | Tom | 23 |
    | 2 | Alice | 22 |

  • 現(xiàn)在,在index文件夾下創(chuàng)建model文件夾睹栖,創(chuàng)建Student.php文件

<?php
namespace app\index\Model;

use think\Model;

class Student extends Model{
    protected $table="student";
}

這里注意Student模型類要繼承think\Model類硫惕,我們可以事先通過use think\Model;來引入這個類。在Student類中野来,我們需要定義 $table 屬性告訴 ThinkPHP 這個模型匹配的是 student 表恼除。在這里你也許會想到要為 Student 類定義 id, name, age 這些屬性,不過在這里并不需要,等你調(diào)用這個模型的時候豁辉,ThinkPHP 會根據(jù)數(shù)據(jù)表的字段為 Student 的實例來添加這些屬性令野。

  • 接下來,我們只要在控制器中引入Student類徽级,就可以訪問數(shù)據(jù)了气破。
<?php

namespace app\index\controller;

use app\index\model\Student;
use think\View;

class Test {

    public function index(){
        
        $view=new View();   
        $student=Student::get(1);
        $view->student=$student;

        return $view->fetch();
    }

}
  • 首先別忘了引入Student類 use app\index\model\Student;
    在 index 方法中,我們通過 Student::get(1) 靜態(tài)獲取了 Student表中主鍵為1的數(shù)據(jù)餐抢,并將它綁定在視圖上现使,我們嘗試在視圖輸出 student 的數(shù)據(jù)。
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>

<body>
  <h1>{$student.name}</h1>
  <h1>{$student.age}</h1>
</body>

</html>
  • 大功告成旷痕,除了這種靜態(tài)調(diào)用的方式碳锈,還可以動態(tài)建立Student實例,這樣就可以進行更加豐富的查詢操作欺抗,這里就不詳細撰述了殴胧,有興趣的同學(xué)可以去翻看ThinkPHP 5.0文檔中關(guān)于模型和數(shù)據(jù)庫的部分。

成為一名ThinkPHP開發(fā)者

  • 在這里佩迟,你已經(jīng)創(chuàng)建了一個ThinkPHP應(yīng)用,建立了第一個控制器竿屹,通過關(guān)聯(lián)模型訪問了數(shù)據(jù)庫的數(shù)據(jù)报强,并將它們輸出到HTML模板上。你已經(jīng)完成了開發(fā)ThinkPHP的第一步拱燃,當(dāng)然秉溉,這些知識對于你而言還是遠遠不夠的,接下來你需要通過更多的資料來熟悉這個框架碗誉,并通過不斷地翻看文檔召嘶,來了解ThinkPHP的各種方法和強大特性,最后附上ThinkPHP 5.0的文檔地址哮缺,加油啦弄跌。
    http://www.kancloud.cn/manual/thinkphp5
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市尝苇,隨后出現(xiàn)的幾起案子铛只,更是在濱河造成了極大的恐慌,老刑警劉巖糠溜,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淳玩,死亡現(xiàn)場離奇詭異,居然都是意外死亡非竿,警方通過查閱死者的電腦和手機蜕着,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來红柱,“玉大人承匣,你說我怎么就攤上這事蓖乘。” “怎么了悄雅?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵驱敲,是天一觀的道長。 經(jīng)常有香客問我宽闲,道長众眨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任容诬,我火速辦了婚禮娩梨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘览徒。我一直安慰自己狈定,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布习蓬。 她就那樣靜靜地躺著纽什,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躲叼。 梳的紋絲不亂的頭發(fā)上芦缰,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音枫慷,去河邊找鬼让蕾。 笑死,一個胖子當(dāng)著我的面吹牛或听,可吹牛的內(nèi)容都是我干的探孝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼誉裆,長吁一口氣:“原來是場噩夢啊……” “哼顿颅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起足丢,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤元镀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后霎桅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栖疑,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年滔驶,在試婚紗的時候發(fā)現(xiàn)自己被綠了遇革。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖萝快,靈堂內(nèi)的尸體忽然破棺而出锻霎,到底是詐尸還是另有隱情,我是刑警寧澤揪漩,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布旋恼,位于F島的核電站,受9級特大地震影響奄容,放射性物質(zhì)發(fā)生泄漏冰更。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一昂勒、第九天 我趴在偏房一處隱蔽的房頂上張望蜀细。 院中可真熱鬧,春花似錦戈盈、人聲如沸奠衔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽归斤。三九已至,卻和暖如春刁岸,著一層夾襖步出監(jiān)牢的瞬間脏里,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工难捌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸦难。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓根吁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親合蔽。 傳聞我的和親對象是個殘疾皇子击敌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容