我创建了laravel项目,该项目在我的本地Windows pc上运行良好。一旦我(通过SSH)上传到Centos7服务器,我的所有路由都无法使用。我试图通过操作来解决,例如清除缓存,删除供应商文件夹并重做安装作曲家,但没有任何帮助。我从日志中抓取如下。
[2018-12-20 13:09:17]本地。错误:LogicException:无法准备路由[api / user]进行序列化。使用闭包。在/ var / www / html / srp / vendor / laravel / framework / sr $中 堆栈跟踪:
#0 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php(61):Illuminate\Routing\Route->prepareForSerialization()
#1 [内部功能]:Illuminate \ Foundation \ Console \ RouteCacheCommand-> fire()
#2 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Container/Container.php(508):call_user_func_array(Array,Array)
#3 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Console/Command.php(169):Illuminate\Container\Container->call(Array)
#4 /var/www/html/srp/vendor/symfony/console/Command/Command.php(261):Illuminate \ Console \ Command-> execute(Object(Symfony \ Component \ Console \ Input \ ArgvInput) ,对象(Sym $
#5 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Console/Command.php(155):Symfony \ Component \ Console \ Command \ Command-> run(Object(Symfony \组件\控制台\ $
#6 /var/www/html/srp/vendor/symfony/console/Application.php(817):Illuminate \ Console \ Command-> run(Object(Symfony \ Component \ Console \ Input \ ArgvInput),Object (Symfony \ Com $
#7 /var/www/html/srp/vendor/symfony/console/Application.php(185):Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Foundation\Console\RouteCacheCo$>
#8 /var/www/html/srp/vendor/symfony/console/Application.php(116):Symfony \ Component \ Console \ Application-> doRun(Object(Symfony \ Component \ Console \ Input \ ArgvInput) ,对象$
#9 /var/www/html/srp/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(121):Symfony \ Component \ Console \ Application-> run(Object(Symfony \组件\ Co $
#10 / var / www / html / srp / artisan(35):Illuminate \ Foundation \ Console \ Kernel-> handle(对象(Symfony \ Component \ Console \ Input \ ArgvInput),Object(Symfony \ Component \ Console) \ Out $ #11 {main}
非常感谢所有建议。
答案 0 :(得分:0)
问题是使用闭包而不是控制器的路由,它看起来像这样:
// Thats the Closure
// v
Route::get('/some/route', function() {
return 'Hello World';
});
由于闭包无法序列化,因此当您有使用闭包的路由时,就无法route:cache
进行路由。这就是为什么您看到该错误的原因。清除缓存或路由无效,因为这是编译时错误。
如果您的路线均未包含闭包,但仍然出现此错误,请检查
routes / api.php
Laravel将默认的auth api路由添加到上述文件。
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
,可以将其注释掉或替换为调用控制器方法的内容
要替换为控制器,请执行以下操作:
Route::middleware('auth:api')->get('/user', 'UserController@index');
如果不需要,将其注释掉。
答案 1 :(得分:0)
下面的链接可以为您提供更好的主意,
laravel Unable to prepare route ... for serialization. Uses Closure
错误是由于调用了route:cache
命令造成的,并且您的路由可能在此处存在一些封闭,因此请避免使用route:cache
这可能是真正的原因。