1. 程式人生 > >ThinkPHP空操作和空控制器的處理

ThinkPHP空操作和空控制器的處理

span gin dex 很多 ron 定義 alt 不存在 父類

所謂的空操作和空控制器,簡而言之就是系統中不存在該方法或控制器,導致系統報錯(本文版本3.2.3)。

正確URL(測試環境): http://oa.com/index.php/admin/public/login 訪問如下:

技術分享圖片

一:空操作處理

修改方法為loginw時報錯如下:

技術分享圖片

系統默認內置報錯機制:1、用戶體驗差 2、嚴重安全隱患。

查看父類控制器文件Controller.class.php,發現如下代碼:

技術分享圖片

意思是說,如果調用的方法不存在但定義了_empty()方法,就會去執行_empty(),或者展示與調用的方法同名的模板文件。我們不可能為每一個未知的方法創建模板,因此此處我們使用_empty()方法來處理空操作。在控制器Public中定義_empty()方法,如下:

技術分享圖片

運行結果:

技術分享圖片

可以通過在_empty()方法中引入一個模板文件,使頁面更加美觀,此處只是測試。但當我們有很多控制器時,在

每個控制器中分別定義一個_empty()不太合理,此時可以在父類Controller.class.php中定義,則子類皆可使用,如下:

技術分享圖片

二、空控制器處理

修改控制器名為Publicu 錯誤如下:

技術分享圖片

查看App.class.php 有如下代碼:

技術分享圖片

因此可再創建一個EmptyController.class.php控制器並內置_empty()方法,當訪問的控制器不存在時,訪問此控制器。

技術分享圖片

再次訪問頁面,如下:

技術分享圖片

ThinkPHP空操作和空控制器的處理