攔截無效請求 控制器或方法不存在
-
- 一、預設無效請求
- 二、顯示具體錯誤資訊
-
- 方法1.配置`config/app.php`
- 方法2. 配置`.env`環境變量
- 三、處理錯誤
-
- 1. 方法不存在
- 2. 控制器不存在
一、預設無效請求
當通路不存在的控制器或方法時,預設會顯示如下頁面:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLykTNzUjNzETM5ITMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
二、顯示具體錯誤資訊
方法1.配置 config/app.php
config/app.php
如果想看具體的錯誤資訊可以配置
config/app.php
配置後顯示具體錯誤資訊:
方法2. 配置 .env
環境變量
.env
将方法1的配置還原;然後看下項目根目錄有個檔案
.example.env
,這是官方提供的
env
示例檔案,可以将它複制一份,然後重命名為
.env
檔案,預設檔案内容如下:
APP_DEBUG = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = test
USERNAME = username
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
[LANG]
default_lang = zh-cn
可以看到第一行
APP_DEBUG = true
預設開啟了debug模式,這時候再通路剛才的位址,可以看到非常詳細的報錯,
注意:這種模式是開發階段才能打開的,線上模式是不能打開的,因為會暴露詳細的檔案和資訊流程,非常不安全。
線上模式,我們設定
APP_DEBUG = false
,這時候又會回到剛才的錯誤頁面:
三、處理錯誤
1. 方法不存在
在
BaseController
控制器中定義
__call
方法,如果通路的控制器繼承了
BaseController
控制器,而方法找不到會進入這個
__call
方法,需要注意的是通路的方法可能是API格式的json資料,也可能是傳回頁面,如果是api資料:
public function __call($name, $arguments)
{
// 如果是API子產品,需要輸出API的資料格式(一般是json)
// 如果是模闆引擎的方式,需要輸出自定義錯誤頁面
$result = [
'status' => 0,
'message' => '找不到該方法',
'result' => null
];
return json($result, 400);
}
當我們通路不存在的方法時:
下圖顯示格式化的json資料格式,是因為浏覽器安裝了JSONView插件
2. 控制器不存在
當通路一個不存在的控制器時,也是顯示如下報錯:
解決方法,在
app\controller
目錄下建立一個
Error
控制器
(名字固定為Error)
:
<?php
namespace app\controller;
class Error
{
public function __call($name, $arguments)
{
$result = [
'status' => 0,
'message' => '找不到該控制器',
'result' => null
];
return json($result, 400);
}
}
這時再通路不存在的控制器:
⭐️重磅推薦:免費商用電商系統
😏想白嫖整個電商系統用來商用?
🤑想有自己的商城實作财富自由?
🤓想學習最佳實踐提升自己技術?
快來進入🚀 傳送門 🚀,開源免費、完整示例帶你快速入門,輕松二開,走上人生巅峰!👨🎓