Laravel路由组添加多中间件报错:Target class [VerifyHeaders]不存在
问题描述
在routes/web.php的路由组中添加新中间件VerifyHeaders后,访问路径报错Target class [VerifyHeaders] does not exist,相关操作及代码如下:
原有路由组代码:
Route::group(['middleware'=>['xFrameOptionsHeader','VerifyHeaders']], function(){ Route::get('/', 'PagesController@getIndex'); Route::get('/otherroute', 'PagesController@getOtherRoute'); // etc... });
执行命令生成中间件:
php artisan make:middleware VerifyHeaders
生成的VerifyHeaders中间件代码:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class VerifyHeaders { /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { return $next($request); } }
报错信息:
Illuminate\Contracts\Container\BindingResolutionException Target class [VerifyHeaders] does not exist.
解决方案
你遗漏了中间件注册的关键步骤,Laravel不会自动识别新生成的中间件,需按以下步骤操作:
1. 注册中间件到HTTP内核
打开app/Http/Kernel.php文件:
- 若仅在路由组中使用(推荐当前场景),将中间件添加到
$routeMiddleware数组并定义别名:
protected $routeMiddleware = [ // ... 其他已有的中间项 'verifyHeaders' => \App\Http\Middleware\VerifyHeaders::class, ];
- 若要让中间件对所有请求生效,添加到
$middleware全局中间件数组即可。
2. 更新路由组的中间件引用
使用刚定义的别名修改路由组代码:
Route::group(['middleware'=>['xFrameOptionsHeader','verifyHeaders']], function(){ Route::get('/', 'PagesController@getIndex'); Route::get('/otherroute', 'PagesController@getOtherRoute'); // etc... });
3. 清除应用缓存
执行命令清除路由与容器缓存,避免旧缓存导致识别异常:
php artisan route:clear php artisan cache:clear
完成以上步骤后,访问路径即可正常运行。
内容的提问来源于stack exchange,提问作者Fnr
相关产品推荐
相关产品推荐

