拦截无效请求 控制器或方法不存在

  • 一、默认无效请求
  • 二、显示具体错误信息
    • 方法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.拦截无效请求 控制器或方法不存在)相关推荐

  1. ThinkPHP6项目基操目录

    前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...

  2. ThinkPHP6项目基操(15.实战部分 阿里云短信redis)

    阿里云短信redis 一.安装阿里云短信SDK 二.封装到项目lib中 三.radis记录验证码 1. 安装redis服务 2. 可视化redis管理软件 3. PHP安装redis扩展 4. 配置缓 ...

  3. ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面API错误)

    项目中的自定义异常处理总结 错误页面&API错误 前言 一.异常分类 1. 控制器找不到 2. 方法找不到 3. 请求资源不存在 4. 系统內部异常.HTTP异常等 二.异常处理 1. 前置处 ...

  4. ThinkPHP6项目基操(3.控制器获取请求参数)

    控制器获取请求参数 一.新建 Demo 控制器 二.获取参数的方法 一.新建 Demo 控制器 <?phpnamespace app\controller; use app\BaseContro ...

  5. ThinkPHP6项目基操(16.实战部分 redis+token登录)

    redis+token登录 前言 一.生成唯一token 二.设置token并返回token到前端 三.登录拦截器(需要登录/不需登录) 前言 登录一般可以使用session处理,它使用比较简单,但是 ...

  6. php登陆项目,ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)

    一.定义中间件 namespace app\middleware; class Check { public function handle($request, \Closure $next) { i ...

  7. ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)

    表单令牌Token 0. 前言 1. TP6 令牌token使用 1.1 表单提交 1.2 AJAX提交 2. TP6 令牌token验证 2.1 路由验证 2.2 控制器验证 2.3 验证器验证 0 ...

  8. ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)

    Filesystem文件上传 控制器: <?php namespace app\admin\controller; use app\BaseController; use think\facad ...

  9. ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)

    中间件处理登录流程 一.定义中间件 二.前置/后置中间件 三.注册中间件 1. 全局中间件 2. 应用中间件 3. 路由中间件 4. 控制器中间件 5. 内置中间件 四.中间件使用 -- 后台登录页面 ...

最新文章

  1. 振动力学基础与matlab应用_【日文好书推荐】振动与噪声控制技术for机械设计者...
  2. go 读取 json 配置文件
  3. 数据库分片教程mysql_简述MySQL分片中快速数据迁移
  4. Cloud for Customer Mashup debug in IFrame
  5. vb.net 设置打印纸张与页边距_装订文档时不想让文字被挡住?在Excel中你可以这样设置打印!...
  6. update语句中使用子查询
  7. Windows GDI和GDI+编程实例剖析(1)
  8. 记一次mysql中文字符乱码的问题排查
  9. ipython快捷键
  10. python2和python3中的map()
  11. 已知坐标增量求坐标方位角_数控机床绝对坐标与增量坐标编程运用,一学便会...
  12. 响应式banner图片轮播布局代码
  13. Matlab常用命令汇总
  14. 算法:分治法之合并排序
  15. Using React, Typescript, and Webpack with Visual Studio 2015
  16. Ubuntu16.04安装谷歌拼音输入法
  17. could not open input file linux 编写 shell遇到了小问题
  18. uniapp 10进制、字符串转16进制码
  19. Solaris 11 安装桌面
  20. C语言字符加法原理,加法原理与乘法原理有什么区别?

热门文章

  1. 使用wireshark工具抓取手机包
  2. 续Gulp使用入门三步压缩CSS
  3. JPA Annotation注解
  4. [Think]故事几则
  5. C语言知识分享:面向对象和面向过程到底是怎么回事?
  6. 一个程序员的全部,并不是“技术”!知道为什么只能当码农吗?
  7. 黑客是互联网的高危职业,选择不慎,很可能如“他们”一样入门到入狱!
  8. FineBI For Excel插件:助力地产业务人员节省50%报表制作时间
  9. pycharm中文包:环境配置与编辑器使用(内附中文包地址)
  10. Web开发者的最佳开发调试环境Chrome