ThinkPhp 5 目錄結構及基礎配置詳解

1
2
3
4
5
6
7
8
9
10
11
12
tp5
├─application     應用目錄
├─extend          擴展類庫目錄(可定義)
├─public          網站對外訪問目錄
├─runtime         運行時目錄(可定義)
├─vendor          第三方類庫目錄(Composer)
├─thinkphp        框架核心目錄
├─build.php       自動生成定義文件(參考)
├─composer.json   Composer定義文件
├─LICENSE.txt     授權說明文件
├─README.md       README 文件
├─think           命令行工具入口

注意:


如果在linux環境下面的話,需要給runtime目錄755權限。

 

有幾個關鍵的路徑先了解下:

目錄 說明 常量
tp5 項目根目錄 ROOT_PATH
tp5/application 應用目錄 APP_PATH
tp5/thinkphp 框架核心目錄 THINK_PATH
tp5/exend 應用擴展目錄 EXTEND_PATH
tp5/vendor Composer擴展目錄 VENDOR_PATH

核心框架目錄的結構如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
├─thinkphp 框架系統目錄
│  ├─lang               語言包目錄
│  ├─library            框架核心類庫目錄
│  │  ├─think           think 類庫包目錄
│  │  └─traits          系統 traits 目錄
│  ├─tpl                系統模板目錄
│  │
│  ├─.htaccess          用於 apache 的重寫
│  ├─.travis.yml        CI 定義文件
│  ├─base.php           框架基礎文件
│  ├─composer.json      composer 定義文件
│  ├─console.php        控制檯入口文件
│  ├─convention.php     慣例配置文件
│  ├─helper.php         助手函數文件(可選)
│  ├─LICENSE.txt        授權說明文件
│  ├─phpunit.xml        單元測試配置文件
│  ├─README.md          README 文件
│  └─start.php          框架引導文件

運行環境

ThinkPHP5的環境要求如下:

  • PHP >= 5.4.0 (完美支持PHP7)PDO PHP ExtensionMBstring PHP ExtensionCURL PHP Extension

在開始之前,你需要一個Web服務器和PHP5.4+運行環境,如果你暫時還沒有,我們推薦使用集成開發環境WAMPServer(Windows系統下集成Apache、PHP和MySQL的服務套件)來使用ThinkPHP進行本地開發和測試,最新版本的WAMP在這裏下載

如果你不想安裝任何WEB服務器,也可以直接使用PHP自帶的WebServer,並且運行router.php來運行測試。

我們進入命令行,進入tp5/public目錄後,輸入如下命令:

?
1
php -S localhost:8888 router.php

接下來可以直接訪問

?
1
http://localhost:8888

注意: S 一定要大寫,端口號可以隨意設置,只要和已有的不衝突,如果要停止服務,直接在命令行下面按CTRL+C即可退出。

入口文件

ThinkPHP5.0版本的默認自帶的入口文件位於public/index.php(實際部署的時候public目錄爲你的應用對外訪問目錄),入口文件內容如下:

?
1
2
3
4
// 定義應用目錄
define('APP_PATH', __DIR__ . '/../application/');
// 加載框架引導文件
require __DIR__ . '/../thinkphp/start.php';

這段代碼的作用就是定義應用目錄APP_PATH和加載ThinkPHP框架的入口文件,這是所有基於ThinkPHP開發應用的第一步。

我們可以在瀏覽器中訪問入口文件

?
1
http://localhost/tp5/public/

運行後我們會看到歡迎頁面:

\


 

官方提供的默認應用的實際目錄結構和說明如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
├─application           應用目錄(可設置)
│  ├─index              模塊目錄(可更改)
│  │  ├─config.php      模塊配置文件
│  │  ├─common.php      模塊公共文件
│  │  ├─controller      控制器目錄
│  │  ├─model           模型目錄
│  │  └─view            視圖目錄
│  │
│  ├─command.php        命令行工具配置文件
│  ├─common.php         應用公共文件
│  ├─config.php         應用配置文件
│  ├─tags.php           應用行爲擴展定義文件
│  ├─database.php       數據庫配置文件
│  └─route.php          路由配置文件

5.0版本採用模塊化的設計架構,默認的應用目錄下面只有一個index模塊目錄,如果我要添加新的模塊可以使用控制檯命令來生成。

切換到命令行模式下,進入到應用根目錄並執行如下指令:

?
1
php think build --module demo

就會生成一個默認的demo模塊,包括如下目錄結構:

?
1
2
3
4
5
6
├─demo  
│  ├─controller      控制器目錄
│  ├─model           模型目錄
│  ├─view            視圖目錄
│  ├─config.php      模塊配置文件
│  └─common.php      模塊公共文件

同時也會生成一個默認的Index控制器文件。

注意:這只是一個初始默認的目錄結構,在實際的開發過程中可能需要創建更多的目錄和文件。

在後面的示例中,爲了方便訪問,我們設置vhost訪問,以apache爲例的話定義如下:

?
1
2
3
4
<virtualhost :80="">
    DocumentRoot "/home/www/tp5/public"
    ServerName tp5.com
</virtualhost>

把DocumentRoot修改爲你本機tp5/public所在目錄,並注意修改本機的hosts文件把tp5.com指向本地127.0.0.1。

如果你暫時不想設置vhost或者還不是特別瞭解如何設置,可以先把入口文件移動到框架的ROOT_PATH目錄,並更改入口文件中的APP_PATH和框架入口文件的位置(這裏順便展示下如何更改相關目錄名稱),index.php文件內容如下:

?
1
2
3
4
// 定義應用目錄爲apps
define('APP_PATH', __DIR__ . '/apps/');
// 加載框架引導文件
require __DIR__ . '/think/start.php';

這樣最終的應用目錄結構如下:

?
1
2
3
4
5
6
tp5
├─index.php       應用入口文件
├─apps            應用目錄
├─public          資源文件目錄
├─runtime         運行時目錄
└─think           框架目錄

實際的訪問URL變成了

?
1
http://localhost/tp5/

提示:


如非特別說明,我們後面的示例均以tp5.com進行訪問,如果你使用了其它的方式請自行修改。

調試模式

ThinkPHP支持調試模式,默認情況下是開啓狀態。調試模式以除錯方便優先,而且在異常的時候可以顯示儘可能多的信息,所以對性能有一定的影響。

我們強烈建議開發者在使用ThinkPHP開發的過程中使用調試模式,5.0默認情況下可以捕獲到任何細微的錯誤並拋出異常,這樣可以更好的獲取錯誤提示和避免一些問題和隱患。

開發完成後,我們實際進行項目部署的時候,修改應用配置文件(application/config.php)中的app_debug配置參數:

?
1
2
// 關閉調試模式
'app_debug' =>  false,

爲了安全考慮,避免泄露你的服務器WEB目錄信息等資料,一定記得正式部署的時候關閉調試模式。

控制器

我們找到index模塊的Index控制器(文件位於application/index/controller/Index.php注意大小寫),我們把Index控制器類的index方法修改爲Hello,World!。

?
1
2
3
4
5
6
7
8
9
10
<!--?php
namespace app\index\controller;
 
class Index
{
    public function index()
    {
        return 'Hello,World!';
    }
}</pre-->

提示:


根據類的命名空間可以快速定位文件位置,在ThinkPHP5.0的規範裏面,命名空間其實對應了文件的所在目錄,app命名空間通常代表了文件的起始目錄爲application,而think命名空間則代表了文件的其實目錄爲thinkphp/library/think,後面的命名空間則表示從起始目錄開始的子目錄。

我們訪問URL地址

?
1
http://tp5.com

就會看到Hello,World!的輸出結果。

如果要繼承一個公共的控制器類,可以使用:

?
1
2
3
4
5
6
7
8
9
10
11
12
<!--?php
namespace app\index\controller;
 
use app\index\controller\Base;
 
class Index extends Base
{
    public function index()
    {
        return 'Hello,World!';
    }
}</pre-->

可以爲操作方法定義參數,例如:

?
1
2
3
4
5
6
7
8
9
10
<!--?php
namespace app\index\controller;
 
class Index
{
    public function index($name = 'World')
    {
        return 'Hello,' . $name . '!';
    }
}</pre-->

當我們帶name參數訪問入口文件地址(例如http://tp5.com?name=ThinkPHP)的時候,在瀏覽器中可以看到如下輸出:

Hello,ThinkPHP!

控制器類可以包括多個操作方法,但如果你的操作方法是protected或者private類型的話,是無法直接通過URL訪問到該操作的,也就是說只有public類型的操作纔是可以通過URL訪問的。

我們來驗證下,把Index控制器類的方法修改爲:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!--?php
namespace app\index\controller;
 
class Index
{
    public function hello()
    {
        return 'hello,thinkphp!';
    }
 
    public function test()
    {
        return '這是一個測試方法!';
    }
 
    protected function hello2()
    {
        return '只是protected方法!';
    }
 
    private function hello3()
    {
        return '這是private方法!';
    }
}</pre-->

當我們訪問如下URL地址的時候,前面兩個是正常訪問,後面兩個則會顯示異常。

?
1
2
3
4
http://tp5.com/index.php/index/index/hello
http://tp5.com/index.php/index/index/test
http://tp5.com/index.php/index/index/hello2
http://tp5.com/index.php/index/index/hello3

當我們訪問hello2和hello3操作方法後的結果都會顯示類似的異常信息:
\

異常頁面包含了詳細的錯誤信息,是因爲開啓了調試模式,如果關閉調試模式的話,看到的默認信息如下:

\

視圖

現在我們在給控制器添加視圖文件功能,我們在application/index目錄下面創建一個view目錄,然後添加模板文件view/index/hello.html,我們添加模板內容如下:

?
1
 
hello, {$name}!

要輸出視圖,必須在控制器方法中進行模板渲染輸出操作,現在修改控制器類如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<!--?php
namespace app\index\controller;
 
use think\Controller;
 
class Index extends Controller
{
    public function hello($name = 'thinkphp')
    {
        $this--->assign('name', $name);
        return $this->fetch();
    }
}

[ 新手須知 ]


這裏使用了use來導入一個命名空間的類庫,然後可以在當前文件中直接使用該別名而不需要使用完整的命名空間路徑訪問類庫。也就說,如果沒有使用

?
1
use think\Controller;

就必須使用

?
1
class Index extends \think\Controller

這種完整命名空間方式。

在後面的內容中,如果我們直接調用系統的某個類的話,都會假設已經在類的開頭使用use進行了別名導入。

注意,Index控制器類繼承了think\Controller類之後,我們可以直接使用封裝好的assign和fetch方法進行模板變量賦值和渲染輸出。

fetch方法中我們沒有指定任何模板,所以按照系統默認的規則(視圖目錄/控制器/操作方法)輸出了view/index/hello.html模板文件。

接下來,我們在瀏覽器訪問

?
1
http://tp5.com/index.php/index/index/hello

輸出:

hello,thinkphp!

讀取數據

在開始之前,我們首先在數據庫demo中創建一個think_data數據表(這裏以mysql數據庫爲例):

?
1
2
3
4
5
6
7
8
9
10
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');

首先我們需要在應用的數據庫配置文件application/database.php中添加數據庫的連接信息如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
return [
    // 數據庫類型
    'type'        => 'mysql',
    // 服務器地址
    'hostname'    => '127.0.0.1',
    // 數據庫名
    'database'    => 'demo',
    // 數據庫用戶名
    'username'    => 'root',
    // 數據庫密碼
    'password'    => '',
    // 數據庫連接端口
    'hostport'    => '',
    // 數據庫連接參數
    'params'      => [],
    // 數據庫編碼默認採用utf8
    'charset'     => 'utf8',
    // 數據庫表前綴
    'prefix'      => 'think_',
    // 數據庫調試模式
    'debug'       => true,
];

接下來,我們修改下控制器方法,添加讀取數據的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!--?php
namespace app\index\controller;
 
use think\Controller;
use think\Db;
 
class Index extends Controller
{
    public function index()
    {
        $data = Db::name('data')--->find();
        $this->assign('result', $data);
        return $this->fetch();
    }
}

定義好控制器後,我們修改模板文件,添加數據輸出標籤如下:

?
1
 
{$result.id}--{$result.data}

模板標籤的用法和Smarty類似,就是用於輸出數據的字段,這裏就表示輸出think_data表的id和data字段的值。

我們訪問會輸出:

1--thinkphp

總結

本章我們學習瞭如何安裝ThinkPHP和框架的目錄結構,如何創建項目的入口文件和開啓調試模式,並通過一個Hello,Name例子說明了如何定義控制器和模板,以及如何讀取數據庫的數據並在模板渲染輸出。

發佈了26 篇原創文章 · 獲贊 324 · 訪問量 128萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章