Laravel:我为什么要使用中间件?

时间:2017-05-18 18:36:02

标签: php laravel views middleware artisan

例如,在我的用户班中,我有一个' isAdmin'在users表列中检查用户角色值的函数,所以在这种情况下我真的不需要使用中间件。
如果我想检查用户是否是我的应用程序中特定帖子的所有者,我将在我的视图中执行以下操作:

@if(Auth::user()->id == $user->id) //$user is the passed user to the view
    <p>I am the owner of the post</p>
@elseif(Auth::guest())
    <p>I'm a visitor</p>
@else
    <p>I'm a registered user visiting this post</p>

我是对的,还是我做错了什么?

2 个答案:

答案 0 :(得分:3)

中间件的一大好处是,您可以将一组逻辑应用于route group,而不必将该代码添加到每个控制器方法。

Route::group(['prefix' => '/admin', 'middleware' => ['admin']], function () {
     // Routes go here that require admin access
});

在控制器中,您永远不必添加检查以查看它们是否为管理员。如果他们通过中间件检查,他们将只能访问该路由。

答案 1 :(得分:1)

中间件在调用控制器操作之前调用,因此它被用作过滤器请求或添加外部数据,这些数据不会根据某些条件来自请求。

让我们举一个简单的例子。

@if(Auth::user()->id == $user->id) //$user is the passed user to the view
    <p>I am the owner of the post</p>
@elseif(Auth::guest())
    <p>I'm a visitor</p>
@else
    <p>I'm a registered user visiting this post</p>  

如果您想要显示用户是所有者,访问者或访客,您需要多少次编写代码?我认为在所有控制器视图中比在中间件中编写控制器中的代码更好,并将中间件应用于您想要的路由组显示。

在你的中间件

public function handle($request, Closure $next)
 {
    @if(Auth::user()->id == $user->id) 
    $user_type = "<p>I am the owner of the post</p>";
   @elseif(Auth::guest())
     $user_type = "<p>I'm a visitor</p>";
   @else
     $user_type = "<p>I'm a registered user visiting this post</p> ";

    $request -> attributes('user_type' => $user_type);

    return $next($request);
 }

于是&#39;现在,在您的控制器中,您可以访问$user_type并传递给查看。

在您的视图中

{{ $user_type }}