TP6在base基础控制器内跳转无效解决

Author Avatar
yyq 2021-07-26 17:24:57
  • 二维码

TP6在base基础控制器内跳转无效解决

        TP6项目,多应用模式下使用了系统的base.php基础控制器,想着在初始化方法内判断未登录后跳转到登录页,居然无效。。。


        NO1:无效代码如下:

            protected function initialize()

           {

                $user_info = session('user_info'); //缓存用户数据

                if(empty($user_info)){

                    return redirect('/xxx/login');         //跳转无效

                }

                。。。

            }


        NO2:百度了下,原来这个问题一直都是存在的,网上给出的方法是另外写个类继承该基础Base,重写initialize()等一堆操作,感觉不太行,还有个方法貌似可以,我没有测试,可自行尝试,先记录下

            a:在base控制器下自定义重向方法:

                    /**

                     * 自定义重定向方法

                     * @param $args

                     */

                    public function redirectTo(...$args)

                    {

                        // 此处 throw new HttpResponseException 抛出异常重定向

                        throw new HttpResponseException(redirect(...$args));

                    }

              b:跳转时使用:

                    $this->redirectTo('/xxx/login');


        NO3:我使用的方法是添加控制器中间件,这是个好东西:

                a:在base控制器的中间件定义处添加:

                        /**

                         * 控制器中间件

                         * @var array

                         */

                        protected $middleware = ["app\xxx\controller\Auth"];


                b:在controller下新建中间件类Auth.php,内容如下:

                        <?php

                        namespace app\xxx\controller;

                        

                        use think\Controller;

                        use think\Request;

                        

                        class Auth

                        {

                            public function handle($request, \Closure $next)

                            {

                                $user_id = session('user_id'); //用户缓存id

                                if(empty($user_id)){    //验证是否登录

                                    return redirect('/xxx/login');

                                }

                        

                                return $next($request);

                            }

                        }

                                             

上一篇 返回列表 下一篇

发表评论

Tips:评论内容请文明用语