如何将会话数据从中间件发送到布局?

How to send session data from middleware to layout?

我有中间件:

 public function handle($request, Closure $next)
{
    if ( Auth::check() && Auth::user()->isStudent() )
    {
        return $next($request);
    }

    return redirect('/');

}

我想通过重定向将数据发送到我的布局,我试过这样做:

$errors = ['You don't have permission, this side is ony for teachers']
return redirect('/login')->with('errors', $errors);

但是它不起作用,我的布局看不到这个。

这是我的布局:

<html>
<head>
</head>
<body>
 @if (session('errors'))
        <div class="alert alert-dismissible alert-danger">
            Wystąpiły następujące błędy:<br/>
            <ul>
                @foreach(session('errors') as $error)
                    <li>{!!$error!!}</li>
                @endforeach
            </ul>
        </div>
    @endif

    @yield('content')
</body>
</html>

这是您可以执行的操作。使用 session()->flash('error','your Message')

在你看来你可以这样做

 public function handle($request, Closure $next)
{
 if ( Auth::check() && Auth::user()->isStudent() )
{
    return $next($request);
}

session()->flash('error','your Message')

return redirect('/');

}

然后在您的视图中显示此会话。

我做错了什么我想... 我的路线如下所示:

Route::group(['middleware' => ['auth', 'student']], function () {
Route::get('/subjects', 'PanelController@showSubjects');
}

Route::group(['middleware' => ['auth', 'teacher']], function () {
Route::get('/teachers', 'PanelController@showClasses');

我的 fmiddleware 函数句柄完全符合您的建议,在我看来是这样的:

@if (session('error'))
        <div class="alert alert-dismissible alert-danger">
            <ul>
                    <li>{{session('error')}}</li>
            </ul>
        </div>
@endif

我仍然在我的布局中看不到此消息,当我以学生身份登录并转到网站(例如 /teachers)时,没有错误,只有教师才能访问... 我不向我的控制器添加任何内容?只有中间件和视图?