无法准备route [api / user]进行序列化。使用闭包-Laravel

时间:2019-11-18 05:01:21

标签: laravel

LogicException  : Unable to prepare route [api/user] for serialization. Uses Closure.

  at /var/www/html/dev_laravel/vendor/laravel/framework/src/Illuminate/Routing/Route.php:917
    913|      */
    914|     public function prepareForSerialization()
    915|     {
    916|         if ($this->action['uses'] instanceof Closure) {
  > 917|             throw new LogicException("Unable to prepare route [{$this->uri}] for serialization. Uses Closure.");
    918|         }
    919| 
    920|         $this->compileRoute();
    921| 

  Exception trace:

  1   Illuminate\Routing\Route::prepareForSerialization()
      /var/www/html/dev_laravel/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php:62

  2   Illuminate\Foundation\Console\RouteCacheCommand::handle()
      /var/www/html/dev_laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32

当我尝试运行laravel命令时

php artisan route:cache

我尝试找出解决方案,但没有找到正确的解决方案。 https://github.com/laravel/framework/issues/22034

这个laravel错误还是还是已修复?

我在web.php文件中有代码

Route::get('/', function () {
    return view('welcome');
});
Route::resource('photos', 'PhotoController@index');

我正在使用Laravel 5.8。刚刚安装并迁移了数据库。我是laravel的初学者。

有人可以让我知道正确的解决方法吗?

预先感谢

3 个答案:

答案 0 :(得分:1)

这不是错误。如果要缓存路由,则不能使用基于Closure的路由。直接将任何基于Closure的路由定向到Controller方法,您会没事的。 [您在web.php中有一个,并且错误指出了api.php中的一个]

您在web.php中基于闭合的路由可以替换为:

Route::view('/', 'welcome');

这会将其定向到仅处理返回的视图文件的Controller。

api.php中基于闭包的路由应指向控制器:

Route::middleware('auth:api')->get('user', 'SomeController@user');

laravel/laravel项目随附的所有路线都视为正常运行,但出于演示目的而存在。

  

“不能缓存基于Closure的路由。要使用路由缓存,必须将任何Closure路由转换为控制器类。”

Laravel 5.8 - Docs - Controllers - Route Caching

答案 1 :(得分:0)

运行命令php artisan route:cache

Laravel将缓存所有路由并将其存储在指定的缓存驱动程序

现在出现错误消息:

错误消息清楚地表明

无法缓存关闭路由

甚至Laravel Docs都说Route Caching

默认情况下,Laravel带有四个路由文件

这将有2条基于闭包的路线

解决方案:

  1. 如果您不再使用该路线,可以将其删除
  2. 制作控制器并将其移至控制器

LogicException:无法准备路由[api / user]

这意味着

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

您的route / api.php中的此代码导致了问题

Route::middleware('auth:api')
->get('/user', 'SomeController@method');

或者如果不使用它,则可以将其删除

答案 2 :(得分:0)

在使用资源进行路由时,您不能使用特定的方法。

您可以使用

Route::resource('photos', 'PhotoController');

Route::get('photos', 'PhotoController@index');