【问题标题】:Passing data from controller to middleware laravel将数据从控制器传递到中间件 laravel
【发布时间】:2020-09-22 02:48:31
【问题描述】:

我想通过中间件将数据传递给视图以计算用户数量时遇到问题。不使用中间件时,控制器中的变量会到达视图。

我的 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');

【问题讨论】:

    标签: php laravel variables controller laravel-middleware


    【解决方案1】:

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

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

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

    【讨论】:

    • 你的意思可能是compact('count')
    猜你喜欢
    • 2021-12-29
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2014-10-30
    • 2018-11-17
    • 2019-04-13
    • 2017-01-29
    相关资源
    最近更新 更多