会话闪存消息在自定义中间件中不起作用

10 浏览
0 Comments

会话闪存消息在自定义中间件中不起作用

我为我的管理面板创建了一个自定义的中间件AdminAuth,它运行良好。但是当我在数据库中创建一个新条目时,我没有收到任何成功的提示信息。以下是我的路由文件中的代码:\n

Route::group(['middleware' => ['web']], function () {
Route::group(['middleware' => ['admins']], function () {
    Route::get('/admin', function(){
        return view('admin.welcome');
    });
    Route::get('/category', ['as' => 'category.index', 'uses' => 'Admin\CategoryController@index']);
    Route::post('/category/create', ['uses' => 'Admin\CategoryController@postCreate']);
    Route::get('/category/edit/{id}', ['as' => 'category.edit', 'uses' => 'Admin\CategoryController@getEdit']); 
});

\n});\n以及控制器方法中的代码:\n

public function postCreate(Request $request)
{
    $rules = [
        'name' => 'required|min:2,max:40|unique:categories'    
    ];
    if ($request->input('parent_id')) {
        $rules = array_add($rules, 'category_pic', 'required');
    }
    $this->validate($request, $rules);
    if ($request->hasFile('category_pic')) {
        $file = $request->file('category_pic');
        $file_name = $file->getClientOriginalName();
        $file_uploaded = $file->move('upload/category', $file_name);
        if (!$file_uploaded) {
            return redirect()
                ->route('category.index')
                ->with('warning', '无法上传类别图片。');                 
        }
    } 
    $category = new Category();            
    $category->name = $request->input('name');
    $category->slug = str_slug($request->input('name'));
    $category->parent_id = $request->input('parent_id'); 
    $category->description = $request->input('description');
    $category->admin_id= auth()->guard('admins')->user()->id;
    if ($request->hasFile('category_pic')) {
        $category->category_pic = $request->file('category_pic')
                                    ->getClientOriginalName();
    }
    if ($category->save()) {
        return redirect()
            ->route('category.index')
            ->with('success', '类别创建成功。');                
    } else {
        return redirect()
            ->route('category.index')
            ->with('success', '类别未创建。');              
    }   
}

\n以及视图模板中的代码:\n

@if(Session::has('success'))
    {{ Session::get('success') }}
@endif

\n我找不到我的错误。我该如何解决这个问题?\n我已经在内核中注册了我的中间件,就像这样:\n

    protected $routeMiddleware = [
    'auth' => \theGrocer\Http\Middleware\Authenticate::class,
    'admins' => \theGrocer\Http\Middleware\AdminAuth::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \theGrocer\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];

0
0 Comments

问题出现的原因是因为在自定义中间件中,会话闪存消息(session flash message)无法正常工作。原因是在中间件中没有正确配置会话(session)和错误消息共享。

解决方法是从中间件中移除StartSessionShareErrorsFromSession,并将路由组的中间件从middleware改为middlewareGroups

具体操作如下:

1. 打开中间件文件,找到protected $middleware数组。

2. 将\Illuminate\Session\Middleware\StartSession::class\Illuminate\View\Middleware\ShareErrorsFromSession::class这两行注释掉。

3. 打开路由文件,找到需要应用中间件的路由组。

4. 将'middleware' => ['web', 'admin']改为'middlewareGroups' => ['web', 'admin']

通过以上操作,问题应该得到解决。

0
0 Comments

在自定义中间件中,Session闪存消息无法正常工作的问题出现的原因是在返回之前没有添加Session闪存消息,解决方法是在返回之前添加Session闪存消息。

public function handle($request, Closure $next)
{
    // 执行中间件逻辑
    
    Session::flash('success', 'Post was created successfully');
    
    return $next($request);
}

0