会话闪存消息在自定义中间件中不起作用
会话闪存消息在自定义中间件中不起作用
我为我的管理面板创建了一个自定义的中间件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, ];
问题出现的原因是因为在自定义中间件中,会话闪存消息(session flash message)无法正常工作。原因是在中间件中没有正确配置会话(session)和错误消息共享。
解决方法是从中间件中移除StartSession
和ShareErrorsFromSession
,并将路由组的中间件从middleware
改为middlewareGroups
。
具体操作如下:
1. 打开中间件文件,找到protected $middleware
数组。
2. 将\Illuminate\Session\Middleware\StartSession::class
和\Illuminate\View\Middleware\ShareErrorsFromSession::class
这两行注释掉。
3. 打开路由文件,找到需要应用中间件的路由组。
4. 将'middleware' => ['web', 'admin']
改为'middlewareGroups' => ['web', 'admin']
。
通过以上操作,问题应该得到解决。