TP筆記2、控制器和URL

1 控制器及URL模式

1.1 創建控制器

1.1.1 控制器的存儲方式
  • 存儲目錄:應用/模塊/Controller/(Application\Home\Controller)
  • 存儲文件名稱:控制器名稱(首字母大寫)+Controller+.class.php
1.1.2 控制器代碼創建規則
  1. 設置命名空間
  2. 引入TP的控制器基類
  3. 創建自己的控制器的類
  4. 創建自己的方法
1.1.3 具體創建控制器實例
  1. 創建控制器的文件
    保存目錄:Application\Home\Controller\TestController.class.php
  2. 聲明命名空間
  3. 引入TP的控制器的基類
  4. 創建自定義的控制器的類
  5. 創建自定義的方法
//1.聲明命名空間
namespace Home\Controller;

//2.引入TP的控制器的基類
use Think\Controller;

//3.創建自定義的控制器,對於控制器的class名稱
//必須要求跟控制器名稱一致,需要繼承TP控制器的基類
//具體TP控制器的基類存儲地址:TPdemo\ThinkPHP\Library\Think\Controller.class.php
class TestController extends Controller{

    //4.創建自定義的方法
    public function test(){
        echo 'in TestController in test action';
    }
}

2 TP中的地址解析

2.1 TP中的全地址解析

  • 當訪問某一個方法時需要在瀏覽器上輸入的完整地址
  1. TP默認方式訪問格式
  • 域名/入口文件?m=模塊名稱&c=控制器名稱&a=方法名稱&參數名稱=參數值
  • 對於上述地址格式按照MVC的原理,mca三個參數其實就是爲了定位到具體的控制器的位置,然後通過實例化對象在調用方法執行代碼
  1. 訪問測試
    在這裏插入圖片描述
  • 對於上述輸入的地址起作用的文件Application/Home/Controller目錄下的Test控制器test方法

2.2 TP的默認訪問

  1. 因爲對於web項目目前設置的index.php是一個默認訪問的文件
  2. TP有默認的訪問的模塊、控制器、方法
    在這裏插入圖片描述

3 TP的調試模式

  • TP的調試模式其實就控制了TP關於配置信息以及函數的緩存功能
  • 如果開啓調試模式,每次訪問項目,TP都會加載最新的配置以及函數信息。
  • 如果關閉了調試模式,當第一次訪問TP會將配置以及函數信息保存到一個文件中(common~runtime.php),後續訪問時就會每次直接讀取該文件並不再去加載最新的配置信息
  • 開發階段,建議開啓調試模式,開啓後能使用最新的配置信息,代碼出錯能看到具體錯誤位置
  • 若項目上線,建議關閉,可以減少日誌文件的生成,代碼出錯只會提示有錯誤,並不提示具體錯誤位置

3.1 開啓調試模式

  • 必須開啓在載入入口文件前
//1、定義應用的存儲地址
define('APP_PATH','./Application/');
//開啓TP的調試模式
define('APP_DEBUG',TRUE);
//2、載入TP框架入口文件
include './ThinkPHP/ThinkPHP.php';

4 TP的配置項

4.1 TP的配置文件位置

TP配置文件有3個地方

  1. TP默認的慣例配置文件:ThinkPHP\Conf\convention.php
  2. 公共模塊的配置文件:Application\Common\Conf\config.php
  3. 模塊配置文件:Application\Home\Conf\config.php

4.2 配置文件的優先級

  • 當同一個配置項在上述的4個配置文件中出現之後,優先級爲:
  • 模塊配置文件>公共模塊的配置文件>TP默認的慣例配置文件

注:關於C函數是TP的一個重要函數,可以獲取配置信息的值(傳遞一個參數),也可以臨時的設置某個配置項的值(傳遞2個參數)
再注:實際開發過程中不要直接修改TP默認的配置文件。可以通過使用覆蓋的方式修改(修改模塊或者公共模塊的配置項就可以)

5 TP中創建模塊

  • 步驟:
  1. 在應用中創建後臺的目錄
  2. 在Admin目錄下創建對應的MVC目錄
  3. 在後臺模塊中創建控制器和方法
  4. 訪問後臺中的某個方法
    在這裏插入圖片描述

6 TP中的4種URL模式

  1. 普通模式
    默認情況下通過給入口文件m、c、a傳遞三個參數指定具體的模塊、控制器、方法來實現訪問某個方法
  2. pathinfo模式
    該模式訪問地址格式像是訪問某個目錄文件。適合搜索引擎優化
    格式:http://localhost/yzf/TPdemo/index.php/Admin/Index/testadmin/name/value
    name是參數名,value是參數值
  3. 重寫模式
    重寫模式在pathinfo的基礎上增加一個重寫規則。一般使用在隱藏項目的入口文件。
    需要web服務器開啓重寫規則定義具體的重寫規則
    拷貝具體重寫規則文件在這裏插入圖片描述
    此時就可以使用重寫模式:
    在這裏插入圖片描述
  4. 兼容模式
    爲了確保使用pathinfo模式,但web服務器不支持此模式。
    對於兼容模式同樣通過入口文件傳遞參數。
    默認情況下傳遞s的參數來指定具體的模塊、控制器、方法
    格式:http://localhost/yzf/TPdemo/index.php?s=/Admin/Index/testadmin

URL地址生成

1 查看U函數的使用
  • 默認使用U函數生成的連接地址,對應的pathinfo模式。對於指定的URL不全表示不全時。會自動的將當前具體進行補充

U($url,$var,$suffix,$domain)

參數 說明
url 指定的具體的URL表達式,指定具體的模塊、控制器、方法
vars 具體生成連接地址的參數,支持數組和字符串
suffix 僞靜態後綴
domain 是否顯示域名,默認爲false
2 使用U函數生成連接地址
public function testu(){
        echo U('testu').'<hr>';
        echo U('testu','id=2').'<hr>';
        echo U('Index/testu','id=2').'<hr>';
        echo U('Index/testu#top','id=2').'<hr>';
        echo U('Index/testu#[email protected]','id=2').'<hr>';
    }

在這裏插入圖片描述

7 頁面跳轉與重定向

7.1 頁面跳轉

  • TP控制基類已經封裝好了2個方法(success與error)能夠實現具體的跳轉操作。
  • success($message=’ ‘,$jumpUrl=’ ',$ajax=false)
  • error($message=’ ‘,$jumpUrl=’ ',$ajax=false)
參數 說明
message 提示信息
jumpUrl 頁面跳轉地址,建議用TP的U函數來生成具體地址
ajax 默認爲false,是否爲Ajax方式,設置提示頁面的等待時間
public function testS(){
        $this->success('OK',U('testU'),10);//成功默認1秒鐘跳轉
    }
    public function testE(){
        $this->error('NO',U('testU'));//錯誤默認3秒鐘跳轉
    }

7.2 頁面重定向

  • redirect($url,$params=array(),\delay=0,$msg=’ ’ )
參數 說明
url 鏈接地址
params 其他url參數
delay 延時跳轉時間
msg 跳轉提示信息
public function testR(){
        $this->redirect('testU','id=6',10,'等待10秒鐘實現跳轉');
    }

在這裏插入圖片描述

8 空操作與空控制器

8.1 空操作(空方法)

  • 當用戶服務某一個控制器下的不存在的方法,TP會執行當前控制器下的_empty方法。此機制就是空操作
public function _empty(){
        //處理當前控制器下不存在的方法。
        echo 'in empty<br>';
        echo ACTION_NAME;//當前用戶執行的方法
    }

在這裏插入圖片描述

8.2 空控制器

  • 當用戶服務某個不存在的控制器。TP執行空控制器下對應方法。
  • 若訪問控制器不存在,則調用空控制器下的_empty方法
  • 若訪問空控制器下的方法也不存在,則調用空控制器下的_empty方法
  • 創建一個空控制器=
class EmptyController extends Controller{
    public function _empty(){
        echo 'in EmptyController empty action<br>';
        echo CONTROLLER_NAME.'<br>';//當前用戶訪問控制器名稱
        echo ACTION_NAME;//當前用戶訪問的方法
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章