Laravel执行route:cache/optimize提示fallbackPlaceholder路由无法序列化如何解决
问题原因
Laravel 的路由缓存机制不支持序列化闭包类型的路由定义,你运行路由缓存或者优化命令时,只要存在任意闭包路由就会触发该错误。本次错误提示出现{fallbackPlaceholder}说明大概率是你定义的兜底路由使用了闭包写法。
解决步骤
- 第一步:优先排查兜底路由写法
检查routes/web.php或者routes/api.php文件中是否有如下闭包形式的兜底路由:Route::fallback(function () { return response()->view('errors.404', [], 404); }); - 第二步:将闭包路由修改为控制器调用形式
先创建对应控制器方法,示例如下:
再把原来的闭包兜底路由替换为控制器调用写法:// app/Http/Controllers/CommonController.php <?php namespace App\Http\Controllers; class CommonController extends Controller { public function handleFallback() { return response()->view('errors.404', [], 404); } }Route::fallback([\App\Http\Controllers\CommonController::class, 'handleFallback']); - 第三步:排查其他闭包路由
如果修改完兜底路由还是报错,运行以下命令查看所有路由,找到Action列标注为Closure的路由全部替换为控制器调用形式:php artisan route:list - 第四步:重新执行缓存命令
所有闭包路由修改完成后,重新运行命令即可正常生成缓存:php artisan route:cache # 或者 php artisan optimize
额外注意
如果排查完自身业务路由没有问题,需要检查近期安装的第三方扩展包是否有注册闭包路由的逻辑,对应修改即可。
内容的提问来源于stack exchange,提问作者Joynal Abedin
相关产品推荐
相关产品推荐

