傳智播客PHP筆記04-thinkphp框架,控制器儲存方式,建立規則,地址解析,除錯模式,配置檔案,建立模組,4中url模式,隱藏入口檔案,url地址生成,頁面跳轉,頁面重定向,空操作,空控制器
技術標籤:PHP學習筆記
1、框架概述
laravel:
thinkphp:www.thinkphp.cn
3.2針對web專案
5.0針對介面使用
2、目錄機構
Application:預設應用程式碼儲存的目錄
Public:預設的儲存靜態資源的目錄(img,js,css)
ThinkPHP:tp框架的原始碼
.htaccess:Apache的重寫規則檔案
composer.json:composer的配置檔案,composer是一個php的管理工具
index.php:重要,代表專案的入口檔案(載入tp原始碼並進行排程)
ThinkPHP目錄結構
Common:內部有很多的函式,有functions子檔案
Lang:tp的語言包
Library:tp的核心原始碼庫
Mode:tp支援的模式
Tpl:預設的系統魔板
tinkphp.php:tp框架的入口檔案,通過引入該檔案可以載入php框架
3、建立網站並引入thinkphp框架
- 1、根目錄下拷貝框架原始碼包下的ThinkPHP資料夾
- 2、建立入口檔案:index.php,並載入thinkphp框架
·定義應用的儲存地址
define(“APP_PATH”,'./Application');
· 載入thinkphp框架的入口檔案
include './ThinkPHP/ThinkPHP.php' ;
以上格式都是限定的,必須完全一致,尤其是大小寫
4、Application目錄結構對應的含義
每個資料夾就是一個模組,但是Common和Runtime較為特殊,具有自己的含義,Common代表所有模組的公共模組(父類),runtime是具體專案執行中的臨時儲存的地址,這兩個模組一般來說是不可訪問的
Common:Common代表所有模組的公共模組(父類)
Home:一般來說是前臺
Runtime:untime是具體專案執行中的臨時儲存的地址
Home目錄結構
Common:儲存當前模組下的函式
Conf:當前模組的配置資訊
Controller:控制器
Model:模型
View:檢視
index.html:安全檔案,防止使用者直接訪問該目錄
5、控制器的儲存方式
儲存目錄:/應用/模組/Controller/ 如:Application\Home\Controller
儲存檔名稱:控制器名稱(首字母大寫)+Controller+.class.php
6、控制器程式碼建立規則
- 1、設定名稱空間
在Application/Home/Controller/建立檔案testController.class.php
在該檔案申明名稱空間
namespace Home\Controller;
- 2、引入tp的控制器基類
use Think\Controller;
- 3、建立自己的控制器的類
class TestController extends Controller{
}
- 4、建立自己的方法
public function test(){
echo “here is the first use framework to code”;
}
完整程式碼如下:
//申明名稱空間
namespace Home\Controller;
//引入tp的控制器基類
use Think\Controller;
//建立控制器類,名字與檔名相同,基類是Controller
class TestController extends Controller{
//建立自定義的方法
public function test(){
echo "here is the first use framework to code";
}
}
7、tp的全地址解析
地址解析就是當訪問某個方法時需要再瀏覽器上輸入的完整地址
1、tp預設方式訪問格式
http://域名/入口檔案?m=模組名稱&c=控制器名稱%按方法名稱&引數名稱=引數值
對於上述地址格式按照mvc的原理,mca三個引數其實就是為了定位到具體的控制器的位置
http://127.0.0.1:xxxx/mysites/ex01/index.php?m=Home&c=Test&a=test
注意:
檔名稱全名為TestController,但在路徑中只填寫Test
方法名寫全稱,模組Home/Controller只填寫到最高的Home。
域名後面要寫具體的頁面訪問檔案,字尾名後面再加問號?
通過以上地址訪問,得到執行結果:
8、tp的除錯模式
除錯模式實際就是控制了tp關於配置資訊以及函式的快取功能,如果開啟了除錯模式,每次訪問專案,tp都會去載入最新的配置以及函式資訊。如果關閉了除錯模式,當第一次訪問tp,會將配置以及函式資訊儲存到一個檔案中(common~runtim.php)。
開發階段建議開啟除錯模式,當代碼出錯在除錯模式下能看到具體的錯誤模式
上線後一定要關閉除錯模式,可以減少日誌檔案的生成,當代碼出錯只會提示有錯誤,但不會提示具體的錯位位置
9、開啟除錯模式
載入框架前開啟除錯模式
在index.php中,載入框架前定義APP_DEBUG常量為TRUE即可
define(‘APP_DEBUG’,TRUE);
該語句必須放在載入tp框架的入口檔案之前
<body>
<?php
// 定義應用的儲存地址
define('APP_PATH', './Application/');
//開啟除錯模式
define(‘APP_DEBUG’,TRUE);
//載入thinkphp框架的入口檔案
include './ThinkPHP/ThinkPHP.php';
?>
</body>
10、tp的配置檔案
- 1、預設的慣例配置檔案:thinkPHP/Conf/conversion.php
- 2、公共模組的配置檔案:\Apllication\Common\Conf\config.php
- 3、模組配置檔案:\Apllication\Home\Conf\config.php
優先順序:
3>2>1
11、建立模組
直接在Application目錄下建立新的資料夾,資料夾名稱就是模組名稱,再在這個檔案下建立控制器目錄Controller,模型Model,檢視View和安全檔案index.html
如建立Admin目錄
再在控制器目錄Controller裡建立具體的控制器檔案indexController.class.php
內容如下:
<?php
namespace Admin\Controller;
use Think\Controller;
class IndexController extends Controller{
public function testAdmin(){
echo "here is my customed controller";
}
}
通過如下地址訪問
http://127.0.0.1:xxxx/mysites/ex01/index.php?m=Admin&c=Index&a=testAdmin
12、tp中的四種url模式
- 1、普通模式
預設情況下給入口檔案m、c、a三個引數來指定具體的模組,控制器,方法名就能訪問一個方法。
沒有任何的限制條件 - 2、pathinfo模式
在訪問的地址格式上看起來比較像訪問某個目錄下的檔案。對於此模式比較符合搜尋引擎優化
格式為:
入口檔案/模組名/控制器名/方法名/引數/引數值
如上例:
http://127.0.0.1:xxxx/mysites/ex01/index.php/Admin/Index/testAdmin/name/value
pathinfo模式需要有web伺服器支援,apache支援,ngix不支援
- 3、重寫模式
在pathinfo的基礎上增加一個重寫規則,一般使用在隱藏專案的入口檔案
重寫規則由伺服器提供
http://127.0.0.1:xxxx/mysites/ex01/Admin/Index/testAdmin/name/value
這裡將index.php隱藏掉了,這個需要伺服器支援,伺服器需要開啟重寫規則,受重寫規則影響
- 4、相容模式
- 通過給入口檔案傳遞引數,預設情況下通過傳遞s引數來訪問具體的模組、控制器、方法
如:
http://127.0.0.1:xxxx/mysites/ex01/index.php/?s=/Admin/Index/testAdmin/name/value
解決了相容pathinfo的形式,又解決了伺服器不支援的情形。
13、實現隱藏入口檔案
1、修改apache主配置檔案httpd.conf,開啟mod_rewrite.so
2、虛擬主機開啟AllowOveride all
3、重啟apache
3、拷貝規則重寫檔案.htaccess,拷貝到伺服器根目錄下
14、URL地址生成
伺服器幫我們直接生成連線地址,偽靜態等
1、檢視u函式的使用
見手冊
15、頁面跳轉
tp控制器基類已經封裝好了倆方法,
success():成功跳轉
error():失敗跳轉
具體使用查手冊
16、頁面重定向
Controller類的redirect方法可以實現頁面的重定向功能
方法和u函式一致。
在Controller.class.php中查redirect方法的原始碼
17、空操作
訪問某個控制器下的不存在的方法,tp會自動執行當前控制器下對應的_empty方法,此機制就是空操作。
18、空控制器
當訪問不存在的控制器,就自動執行對應的空方法
空控制器名稱為EmptyContr.class.php
重寫該類即可,給該控制器增加一個_empty()方法機即可。