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