快速上手ThinkPHP 5.0

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

ThinkPHP 5.0的安裝

方式一:官網下載

官網地址: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. 后續需要更新框架時,只要切換到thinkphp文件夾并執行
    git pull https://github.com/top-think/framework

運行ThinkPHP項目

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

配置數據庫

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

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

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

了解目錄的結構

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

創建第一個控制器

  • 打開controller文件夾我們可以發現系統已經為我們創建了Index控制器,這也是我們為什么在項目創建完成后就可以通過瀏覽器訪問的原因,在這里,我們創建一個新的控制器——Test控制器,我們在controller文件夾新建一個test.php文件。

  • test.php 代碼如下

namespace app\index\controller;

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

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

  • 當然也可以為控制器添加初始化方法 _initialize(),它會在控制器調用方法時前被調用。

  • 控制器一般不需要任何輸出,直接return數據就可以了。

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

  • 這里你應該就發現了URL的規律了,在index.php后面加上/模塊名/控制器名/方法名就可以調用相應的方法了。

創建第一個視圖

在服務器上展示一個網頁

  • 在傳統的PHP中,我們很容易就習慣把html和標簽和php語句混到一起。而在MVC結構中,我們要把展現在瀏覽器上的部分和業務邏輯隔離開來,使得項目的可維護性更高。
  • ThinkPHP 5.0沒有為我們建立視圖文件夾,我們在index模塊文件夾下建立一個view文件夾,然后在view文件夾下建立一個與控制器同名的Test文件夾,當控制器Test需要調用模板時,會在/index/view/Test中尋找。
  • 這里我們在Test下創建一個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命名空間,并創建一個View的實例。
namespace app\index\controller;

use think\View;

class Test {

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

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

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

將變量輸出到模板

  • 我們需要把控制器中處理后的數據輸出到模板上,這時只要把變量綁定到$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>
  • 刷新頁面,即可看到效果。

  • 在視圖中,可以用點運算符(.)來訪問數組的元素。
    /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>
  • 當然也可以使用 {$person["name"]}{$person["age"]}

訪問數據庫

  • 在之前,我們已經配置好了數據庫,假定我們現在有一張student表(id為主鍵)
    | id | name | age |
    | -- | ----- | --- |
    | 1 | Tom | 23 |
    | 2 | Alice | 22 |

  • 現在,在index文件夾下創建model文件夾,創建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 這些屬性,不過在這里并不需要,等你調用這個模型的時候,ThinkPHP 會根據數據表的字段為 Student 的實例來添加這些屬性。

  • 接下來,我們只要在控制器中引入Student類,就可以訪問數據了。
<?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) 靜態獲取了 Student表中主鍵為1的數據,并將它綁定在視圖上,我們嘗試在視圖輸出 student 的數據。
<!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>
  • 大功告成,除了這種靜態調用的方式,還可以動態建立Student實例,這樣就可以進行更加豐富的查詢操作,這里就不詳細撰述了,有興趣的同學可以去翻看ThinkPHP 5.0文檔中關于模型和數據庫的部分。

成為一名ThinkPHP開發者

  • 在這里,你已經創建了一個ThinkPHP應用,建立了第一個控制器,通過關聯模型訪問了數據庫的數據,并將它們輸出到HTML模板上。你已經完成了開發ThinkPHP的第一步,當然,這些知識對于你而言還是遠遠不夠的,接下來你需要通過更多的資料來熟悉這個框架,并通過不斷地翻看文檔,來了解ThinkPHP的各種方法和強大特性,最后附上ThinkPHP 5.0的文檔地址,加油啦。
    http://www.kancloud.cn/manual/thinkphp5
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容