例如,在我的用户班中,我有一个' 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>
我是对的,还是我做错了什么?
答案 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 }}