TP6在base基础控制器内跳转无效解决
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);
}
}