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

Laravel: Why should I use Middlewares?

例如,在我的用户 class 中,我有一个 'isAdmin' 函数,它检查用户 table 列中用户的角色值,所以我真的没有看到在这种情况下需要使用中间件。
如果我想在我的应用程序中检查用户是否是特定 post 的所有者,在我看来我会这样做:

@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>

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

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

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

并且在控制器中,您永远不必添加检查以查看他们是否是管理员。他们只有通过中间件检查才能访问路由。

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

举一个简单的例子。

@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>  

如果你想显示用户是所有者,访客还是客人,你需要写多少次代码?我认为总的来说 controllerview 比在控制器中编写代码更好,在 Middleware 中编写并且将中间件应用于要显示的路由组。

在你的中间件中

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);
 }

所以现在在您的控制器中您可以访问 $user_type 并传递给视图。

在您看来

{{ $user_type }}