1. 程式人生 > 其它 >傳智播客PHP筆記04-thinkphp框架,控制器儲存方式,建立規則,地址解析,除錯模式,配置檔案,建立模組,4中url模式,隱藏入口檔案,url地址生成,頁面跳轉,頁面重定向,空操作,空控制器

傳智播客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子檔案

Conf:預設的配置資訊
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()方法機即可。