将数据从控制器传递到中间件 laravel

Passing data from controller to middleware laravel

当我想通过中间件将数据传递给视图以统计用户数量时遇到问题。当不使用中间件时,来自控制器的变量进入视图。

我的HomeController.php

 public function index()
    {
        $count = User::count();
        return view('admin.Dashboard', compact($count);
    }

我的中间件

 public function handle(Request $request, Closure $next)
    {
        if ($request->user() && $request->user()->role == 'admin') {
            return response()->view('admin.Dashboard');
        } else {
            return response()->view('member.dashboard');
        }
        return $next($request);
    }

如果在未传递给视图的路由中使用中间件,则 $count 变量

我的web.php

Auth::routes(['verify' => true]);
Route::get('/dashboard', 'HomeController@index')->middleware('verified', 'cekrole')->name('home');

在您的中间件中,您正在返回响应(一个视图),所以

return $next($request);

永远不会被执行,所以你的控制器也不会。

用户调用 /dashboard > 你的中间件被调用 > 如果它是你返回的管理员 admin.Dashboard,否则 member.dashboard。

但您永远不会在控制器中执行代码。

作为快速修复,您可以将中间件替换为:

public function handle(Request $request, Closure $next)
    {
        if ($request->user() && $request->user()->role == 'admin') {
            $count = User::count();
            return view('admin.Dashboard', compact('count'));
        } 
        return response()->view('member.dashboard');

    }

或在您的控制器中进行这些测试(admin/not 管理员)