Laravel检测刀片内部的中间件

时间:2017-02-22 16:10:02

标签: laravel

//blade
@if( middleware('foo') )

    pass    

@else

    not pass

@endif

//Route
Route::group(['middleware' => ['foo']], function(){

我需要一个页面来检测用户是否通过中间件并在刀片中显示不同的内容。

它的自定义登录中间件,而不是来自laravel original的中间件。

任何人都知道如何实现这个目标?

2 个答案:

答案 0 :(得分:3)

只需将布尔变量传递给控制器​​,如下所示:

public function handle($request, Closure $next) {
     return $next($request, true);
}

然后将变量传递给视图:

public function controller(Request $request, $isMiddlewareSet) {
    return view('view',['isMiddlewareSet'=>$isMiddlewareSet]);
}

最后在刀片视图中使用它:

@if($isMiddlewareSet) 
     //middleware is detected
@else
     //middleware is not set
@endif

答案 1 :(得分:2)

中间件用于过滤HTTP请求,而不是呈现或不呈现的内容。您可以过滤控制器功能,只有在它通过中间件(例如,如果通过身份验证)时才可用,并且控制器仅在传递中间件时运行该功能。 在我看来,您尝试为经过身份验证的用户显示不同的内容,您可以在刀片中使用Auth外观。

@if(Auth::check() )
    pass    
@else
   not pass
@endif

如果由于某种原因不想使用Auth Facade,您可以随时使用Session变量并使用它进行验证。

// Midleware
Session::set('IPassedTheMiddleware','true');

//View

@if(Session::get('IPassedTheMiddleware') == 'true' )
    pass    
@else
   not pass
@endif

在此处了解有关身份验证的详情https://laravel.com/docs/5.4/authentication