刚开始接触laravel会遇到这样一个问题,我们在判断用户未登录时跳转至登录页面一般都是建一个控制器基类,在基类的构造函数里面进行判断,如果未登录就重定向到登录页
我用tp比较多,在tp控制器的构造函数里面可以直接使用redirect函数进行跳转动作,然而在laravel却不行,这里要提一个东西,那就是中间件,可以很完美的满足我们的需求,当然这篇文章仅供新手参考,大佬勿喷。
首先在app\Middleware目录下新建一个中间件,这里我命名为CheckLogin
namespace App\Http\Middleware;
use Closure;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class CheckLogin extends Middleware
{
public function handle($request, Closure $next, ...$guards)
{
$response = $next($request);
if(!session('user')){//判断用户未登录就跳转至登录页面
return redirect('login');
}
//如果已登录则执行正常的请求
return $response;
}
}
然后在app/Http/Kernel.php里面的$routeMiddleware数组里面,将刚新建的中间件加进去,别名自己命名。我这里命名的是'check.login'。
新建一个控制器基类,在这个基类的构造函数里面去注册这个中间件。除了登录控制器其他的需要用户登录控制器都继承这个基类,这里我命名为BaseController。
namespace App\Http\Controllers\Index;
use App\Http\Controllers\Controller;
class BaseController extends Controller{
public function __construct()
{
$this->middleware('check.login');//检测登录
}
}
这样请求如果用户未登录就会重定向到登录页面了。
tp里面也是有中间件,用法也基本一样,因为我比较懒再加上可以直接重定向跳所以就没咋用。
PS:tp6跳转方法
redirect('/login/login')->send();
//或者
throw new HttpResponseException(redirect('/login/login'));