将数据从控制器传递到中间件 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 管理员)
当我想通过中间件将数据传递给视图以统计用户数量时遇到问题。当不使用中间件时,来自控制器的变量进入视图。
我的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 管理员)