ThinkPHP
是一個快速、簡單的基於MVC
和面向對象的輕量級PHP
開發框架,自2006年誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡代碼的同時,尤其注重開發體驗和易用性,並且擁有眾多的原創功能和特性,為WEB
應用和API
開發提供了強有力的支持。下面我就重點介紹ThinkPHP5新手需要配置的地方
1、入口文件
ThinkPHP5.0
版本的默認自帶的入口文件位於public/index.php
(實際部署的時候public
目錄為你的應用對外訪問目錄)
2、資源訪問
網站的資源文件訪問不會影響正常的操作訪問,只有當訪問的資源文件不存在的時候才會解析到入口文件,一般就會提示模塊不存在的錯誤。網站的資源文件一般放入public
目錄的子目錄下面,例如下面是一個建議規范:
public ├─index.php 應用入口文件 ├─static 靜態資源目錄 │ ├─css 樣式目錄 │ ├─js 腳本目錄 │ └─img 圖像目錄
記住,千萬不要在public
目錄之外的任何位置放置資源文件,包括application
目錄。
訪問資源文件的URL路徑是:
http://tp5.com/static/css/style.css http://tp5.com/static/js/common.js http://tp5.com/static/img/picture.jpg
當然,你也可以更改資源文件的URL路徑,在config.php中配置如下:
// 視圖輸出字符串內容替換 'view_replace_str' => [ '__static__' => '/static' ],
訪問資源文件的改變后URL路徑是:
<link href="__static__/css/bootstrap.css" rel="stylesheet">
3、調試模式
ThinkPHP
支持調試模式,默認情況下是開啟狀態(5.0.10+
版本開始,默認關閉調試模式,需要自己開啟)。調試模式以除錯方便優先,而且在異常的時候可以顯示盡可能多的信息,所以對性能有一定的影響。(調試模式不支持模塊單獨開啟,只能應用全局開啟)
開發完成后,我們實際進行項目部署的時候,修改應用配置文件(application/config.php
)中的app_debug
配置參數:
// 關閉調試模式 'app_debug' => false,
為了安全考慮,避免泄露你的服務器WEB目錄信息等資料,一定記得正式部署的時候關閉調試模式。
4、控制器
如果要訪問一個駝峰命名的控制器,例如我們把上面的例子改成一個HelloWorld
控制器。
<?php namespace app\index\controller; class HelloWorld { public function index($name = 'World') { return 'Hello,' . $name . '!'; } }
默認情況下正確的方法是使用下面的URL進行訪問
http://tp5.com/index.php/index/hello_world
下面的訪問地址是錯誤的
http://tp5.com/index.php/index/HelloWorld
當然也可以區分大小寫訪問,在config.php文件中,設置了關閉url自動轉換如下
'url_convert' => false,
5、URL訪問
ThinkPHP
采用單一入口模式訪問應用,對應用的所有請求都定向到應用的入口文件,系統會從URL
參數中解析當前請求的模塊、控制器和操作,下面是一個標准的URL
訪問格式:
http://domainName/index.php/模塊/控制器/操作
模塊在ThinkPHP中的概念其實就是應用目錄下面的子目錄,而官方的規范是目錄名小寫,因此模塊全部采用小寫命名,無論URL是否開啟大小寫轉換,模塊名都會強制小寫。
應用的index
模塊的Index
控制器定義如下:
<?php namespace app\index\controller; class Index { public function index() { return 'index'; } public function hello($name = 'World') { return 'Hello,' . $name . '!'; } }
如果我們直接訪問入口文件的話,由於URL中沒有模塊、控制器和操作,因此系統會訪問默認模塊(index)下面的默認控制器(Index)的默認操作(index),因此下面的訪問是等效的:
http://tp5.com/index.php http://tp5.com/index.php/index/index/index
如果要訪問控制器的hello方法,則需要使用完整的URL地址
http://tp5.com/index.php/index/index/hello
6、隱藏入口
可以去掉URL地址里面的入口文件index.php
,但是需要額外配置WEB服務器的重寫規則。
以Apache
為例,需要在public下的同級添加.htaccess
文件(官方默認自帶了該文件),內容如下:
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>
如果用的phpStudy
,規則如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
接下來就可以使用下面的URL地址訪問了
http://tp5.com/index/index/index http://tp5.com/index/index/hello
7、根命名空間(類庫包)
根命名空間是一個關鍵的概念,以上面的\think\cache\driver\File
類為例,think
就是一個根命名空間,其對應的初始命名空間目錄就是系統的類庫目錄(thinkphp/library/think
),我們可以簡單的理解一個根命名空間對應了一個類庫包。
系統內置的幾個根命名空間(類庫包)如下:
如果需要增加新的根命名空間,有兩種方式:注冊新的根命名空間或者放入EXTEND_PATH
目錄(自動注冊)。
請注意本手冊中的示例代碼為了簡潔,如無指定類庫的命名空間的話,都表示指的是think
命名空間,例如下面的代碼:
Route::get('hello','index/hello');
請自行添加 use think\Route
或者使用
\think\Route::get('hello','index/hello');
8、common公共文件
其中common
模塊是一個特殊的模塊,默認是禁止直接訪問的,一般用於放置一些公共的類庫用於其他模塊的繼承,例如:
// 應用公共文件 //增加一個新函數 function my_fun(){ return '應用公共文件'; }
調用直接{:my_fun()}可以了