• 网站导航
  • 文章详情

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



留言

  • 暂无留言,快来留言吧

公告

本网站由云天阁技术支持开发,供学习方便工作,如有侵权,不适或建议,请联系发送邮件至 2776870047@qq.com ,谢谢。