当前,如果您碰到了某条路线,我将使用条件逻辑进行重定向。问题1,我目前的操作方式不允许参数通过路由,因此它会出错,而不仅仅是检查路由是否匹配。问题2这种方法草率繁琐。我真的需要解决问题1,我可以不清理就住,但我真的很想。
目前我正在做这样的事情
namespace App\Http\Middleware;
use Auth;
use Closure;
class myMiddleware
{
public function handle($request, Closure $next)
{
if($user = Auth::user()){
// Do some stuff
} else {
if(
$request->getUri() != route('login') &&
$request->getUri() != route('password.request') &&
$request->getUri() != route('password.reset', null) //<-- This doesn't work because a parameter isn't properly given, want ANY param here
)
{
return redirect()->route('login')->with('warning', 'Please Login to access restricted area.');
}
}
return $next($request);
}
}
我想以一种更简洁的方式对此进行说明,但是如果URI由于某些原因发生了更改,仍然可以引用路由的“名称”。
答案 0 :(得分:0)
听起来您正在尝试做Laravel已经提供的操作。
有两种中间件auth
和guest
需要登录,也可以不登录。最好的使用方式是在小组中。
$router->middleware('auth:user')->group(function (Router $router) {
// Your routes that require a user to be logged in
});
$router->middleware('guest:user')->group(function (Router $router) {
// Your routes that require a user not be logged in
});
中间件的:user
部分指定了防护,如果只有一个防护,则可以省略。
尽管以上绝对是您特定用例所需的100%,但是有一种更好的方法来检查路由是否符合您的需求,即请求对象上的routeIs()
方法。 / p>
因此要替换代码中的if语句,将是:
if ($request->routeIs('login', 'password.*')) {
// Code
}
如果当前路由的名称为login
或名称以password.
开头,则返回true。
我想强调一下,auth
和guest
中间件组绝对是您应该做的,但是我补充了这一点,因为我觉得这就是您想要的功能。
以一个的价格得到两个答案。