ThinkPHP6项目基操(4.拦截无效请求 控制器或方法不存在)
拦截无效请求 控制器或方法不存在
- 一、默认无效请求
- 二、显示具体错误信息
- 方法1.配置`config/app.php`
- 方法2. 配置`.env`环境变量
- 三、处理错误
- 1. 方法不存在
- 2. 控制器不存在
一、默认无效请求
当访问不存在的控制器或方法时,默认会显示如下页面:
二、显示具体错误信息
方法1.配置config/app.php
如果想看具体的错误信息可以配置config/app.php
'show_error_msg' => true
配置后显示具体错误信息:
方法2. 配置.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)
:
<?phpnamespace app\controller;class Error
{public function __call($name, $arguments){$result = ['status' => 0,'message' => '找不到该控制器','result' => null];return json($result, 400);}
}
这时再访问不存在的控制器:
⭐️重磅推荐:免费商用电商系统
ThinkPHP6项目基操(4.拦截无效请求 控制器或方法不存在)相关推荐
- ThinkPHP6项目基操目录
前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...
- ThinkPHP6项目基操(15.实战部分 阿里云短信redis)
阿里云短信redis 一.安装阿里云短信SDK 二.封装到项目lib中 三.radis记录验证码 1. 安装redis服务 2. 可视化redis管理软件 3. PHP安装redis扩展 4. 配置缓 ...
- ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面API错误)
项目中的自定义异常处理总结 错误页面&API错误 前言 一.异常分类 1. 控制器找不到 2. 方法找不到 3. 请求资源不存在 4. 系统內部异常.HTTP异常等 二.异常处理 1. 前置处 ...
- ThinkPHP6项目基操(3.控制器获取请求参数)
控制器获取请求参数 一.新建 Demo 控制器 二.获取参数的方法 一.新建 Demo 控制器 <?phpnamespace app\controller; use app\BaseContro ...
- ThinkPHP6项目基操(16.实战部分 redis+token登录)
redis+token登录 前言 一.生成唯一token 二.设置token并返回token到前端 三.登录拦截器(需要登录/不需登录) 前言 登录一般可以使用session处理,它使用比较简单,但是 ...
- php登陆项目,ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
一.定义中间件 namespace app\middleware; class Check { public function handle($request, \Closure $next) { i ...
- ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)
表单令牌Token 0. 前言 1. TP6 令牌token使用 1.1 表单提交 1.2 AJAX提交 2. TP6 令牌token验证 2.1 路由验证 2.2 控制器验证 2.3 验证器验证 0 ...
- ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)
Filesystem文件上传 控制器: <?php namespace app\admin\controller; use app\BaseController; use think\facad ...
- ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
中间件处理登录流程 一.定义中间件 二.前置/后置中间件 三.注册中间件 1. 全局中间件 2. 应用中间件 3. 路由中间件 4. 控制器中间件 5. 内置中间件 四.中间件使用 -- 后台登录页面 ...
最新文章
- 振动力学基础与matlab应用_【日文好书推荐】振动与噪声控制技术for机械设计者...
- go 读取 json 配置文件
- 数据库分片教程mysql_简述MySQL分片中快速数据迁移
- Cloud for Customer Mashup debug in IFrame
- vb.net 设置打印纸张与页边距_装订文档时不想让文字被挡住?在Excel中你可以这样设置打印!...
- update语句中使用子查询
- Windows GDI和GDI+编程实例剖析(1)
- 记一次mysql中文字符乱码的问题排查
- ipython快捷键
- python2和python3中的map()
- 已知坐标增量求坐标方位角_数控机床绝对坐标与增量坐标编程运用,一学便会...
- 响应式banner图片轮播布局代码
- Matlab常用命令汇总
- 算法:分治法之合并排序
- Using React, Typescript, and Webpack with Visual Studio 2015
- Ubuntu16.04安装谷歌拼音输入法
- could not open input file linux 编写 shell遇到了小问题
- uniapp 10进制、字符串转16进制码
- Solaris 11 安装桌面
- C语言字符加法原理,加法原理与乘法原理有什么区别?
热门文章
- 使用wireshark工具抓取手机包
- 续Gulp使用入门三步压缩CSS
- JPA Annotation注解
- [Think]故事几则
- C语言知识分享:面向对象和面向过程到底是怎么回事?
- 一个程序员的全部,并不是“技术”!知道为什么只能当码农吗?
- 黑客是互联网的高危职业,选择不慎,很可能如“他们”一样入门到入狱!
- FineBI For Excel插件:助力地产业务人员节省50%报表制作时间
- pycharm中文包:环境配置与编辑器使用(内附中文包地址)
- Web开发者的最佳开发调试环境Chrome