thinkphp6 基类重定向无效
tp6 基类重定向无效,在tp6 __construct或initialize基类拦截时候重定向但并没有跳转响应解决。
问题:
tp6 基类重定向无效,在tp6 __construct或initialize基类拦截时候重定向但并没有跳转响应。
解决方案:
1、使用header跳转【简单,但不推荐使用,因为后续不好做日志或者其他问题记录操作】
// header('location:url'); header('location:/index/Msg/index');///模块/控制器/方法
2、在基类抛出异常,在异常接管接收对应指定的状态码处理
1)定义状态码
在config文件夹下,创建状态码配置文件 code.php
<?php // +---------------------------------------------------------------------- // | 应用设置 状态码 - 不要设置 0 -1 500 这些常用的状态码 // +---------------------------------------------------------------------- return [ //错误 前台跳转 抛出 状态码 'error_url' => 1099, ];
2)在基类里面抛出错误码,注意不要使用0 -1 500 这些常用的状态码
class Base extends BaseController { public function initialize() { parent::initialize(); // TODO: Change the autogenerated stub $this->check(); } public function check() { if (empty($this->web_user_info)){ $msg = '需要登录,才能访问哦'; throw new Exception($msg,config('code.error_url')); //这里建议封装成一个 函数 接收错误信息参数 这样其他地方抛出类似重定向操作的 统一调用函数 } } }
3)异常处理类判断是否存在对应的状态码就处理重定向
这里举例子如果自己没有接管异常走默认异常接管的话,框架默认接管文件在 app/ExceptionHandle.php
在 render 方法添加处理
/** * Render an exception into an HTTP response. * * @access public * @param \think\Request $request * @param Throwable $e * @return Response */ public function render($request, Throwable $e): Response { // 添加自定义异常处理机制 if ($e->getCode() == config('code.error_url')){ return redirect((string)url('/index/Msg/index',['msg' => $e->getMessage()])); } // 其他错误交给系统处理 return parent::render($request, $e); }
结束 测试OK