Laravel访问自定义trash视图时报View [products.show]不存在如何解决
Laravel 自定义回收站视图报错 View [products.show] not found 解决方案
问题根源
该报错由路由匹配优先级导致:
- Laravel的资源路由
Route::resource('products', 'ProductController')会自动生成7个常规路由,其中包含GET /products/{product}对应控制器的show方法,该路由会匹配products/后面的任意参数 - 你没有单独定义
products/trash路由,且即使定义了如果放在资源路由后面,访问/products/trash时,Laravel会把trash识别为{product}参数,优先匹配到show方法,默认show方法需要返回products.show视图,所以才会出现你没有调用该视图却报错的问题
修复步骤
调整路由配置,补充trash路由并调整顺序
在web.php中先添加trash自定义路由,再声明资源路由(Laravel路由从上到下匹配,优先级高的路由放前面)
Route::get('/', function () { return view('welcome'); }); // 自定义trash路由放在资源路由前 // Laravel 7及以下版本写法: Route::get('products/trash', 'ProductController@trash')->name('products.trash'); // Laravel 8及以上版本写法(需引入控制器命名空间): // Route::get('products/trash', [\App\Http\Controllers\ProductController::class, 'trash'])->name('products.trash'); Route::resource('products', 'ProductController');
确认视图文件路径正确
确保你的trash视图文件路径为resources/views/products/trash.blade.php,如果products文件夹不存在,需要手动创建后再放入trash.blade.php文件。
3. ### 验证路由匹配
运行以下命令查看路由列表,确认products/trash路由排在products/{product}路由前面即可:
php artisan route:list
内容的提问来源于stack exchange,提问作者cinoprogrammer
相关产品推荐
相关产品推荐

