TP框架中 空控制器和空方法的解決方案

2022-08-05 19:03:19 字數 3606 閱讀 8051

空操作:乙個物件(控制器)呼叫本身不存在的方法

空控制器:在例項化控制器物件的時候,沒有找到指定的類

1)在controller資料夾下新建login控制器:12

3456

78910

<?php

namespaceceshi\controller;

usethink\controller;

classlogincontrollerextendscontroller

}

一、 在位址列訪問不存在的方法,會怎麼樣?

通過此頁面,我們可以知道:

(1)這樣的介面暴露了我們是用什麼工具寫的**,同時暴露了thinkphp的版本號,如果黑客找到該版本號的漏洞就可以攻擊你了。

(2)其次,這樣的介面很不友好,對於使用者來說,他們看不懂也不知道是**出錯了。

我們應該給出更為安全、更為友好的提示。

父類中有個方法如下圖,我們可以仿照這個來做:

第一種方法:做乙個空的模板

1)在view資料夾下建乙個ceshi資料夾,

簡單布局一下login.html 頁面12

<title>無標題文件

<styletype="text/css">

*

<body>

<div>您訪問的操作方法有誤!

2) 再次訪問http://localhost/wamp/thinkphp/index.php/ceshi/login/loginsss

這樣相比只出現**要好的多,但是,我們不可能每輸入乙個不存在的方法就做乙個模板,這樣不切實際,再說我們也不知道使用者下一次會輸入什麼樣的操作方法,所以這種方法並有太大的侷限性。

第二種方法:做乙個空的方法:_empty()方法12

3456

78910

1112

13<?php

namespaceceshi\controller;

usethink\controller;

classlogincontrollerextendscontroller

publicfunction_empty()

}

這樣不論訪問到什麼樣的空方法都會顯示「您訪問的操作方法不存在!」如圖:

二、 在位址列訪問不存在的控制器,會怎麼樣?出現同樣的報錯

解決方法:

新建乙個empty控制器:

emptycontroller.class.php12

3456

789<?php

namespaceceshi\controller;

usethink\controller;

classemptycontrollerextendscontroller

}

再訪問http://localhost/wamp/thinkphp/index.php/ceshi/main/login

換個  http://localhost/wamp/thinkphp/index.php/ceshi/mmmn/login

這樣就可以解決空控制器和空操作的問題了,簡單來說就是做乙個空方法和乙個空控制器的方法,當沒有這種控制器或者方法,就直接跳到你做的頁面中去.~

TP框架部分 空控制器

namespace admin controller usethink controller class denglucontroller extendscontroller 這裡面只有test方法,如果訪問空的方法時,例如在瀏覽器輸入localhost thinkphp index.php adm...

TP的空操作 空控制器 跨控制器呼叫

系統在找不到請求的方法的時候,會定位到 empty 方法處理,利用這個機制,我們可以對使用者請求的不存在的所有操作進行統一。當系統找不到控制器,會定位到空控制器上emptycontroller managercontroller中的方法 public function managertest1 其他...

TP框架 多級控制器,多層控制器

多級控制器是指控制器可以通過子目錄把某個控制器層分組存放,首先需要設定控制器的分級層次,例如,我們設定2級目錄的控制器層 controller level 2,控制器檔案的位置放置如下 controller訪問控制器 useruser分級 組 usertypecontroller.class.php...