【Laravel6】”Unable to prepare route [/] for serialization. Uses Closure”への対処方法

Laravel

スポンサーリンク

以下のコマンドでルーティングのキャッシュを作ろうとしたら、エラーが出た。

php artisan route:cache

↓エラー内容

$ php artisan route:cache
Route cache cleared!

   LogicException 

  Unable to prepare route [/] for serialization. Uses Closure.

  at vendor/laravel/framework/src/Illuminate/Routing/Route.php:1150
    1146|      */
    1147|     public function prepareForSerialization()
    1148|     {
    1149|         if ($this->action['uses'] instanceof Closure) {
  > 1150|             throw new LogicException("Unable to prepare route [{$this->uri}] for serialization. Uses Closure.");
    1151|         }
    1152| 
    1153|         $this->compileRoute();
    1154| 

      +14 vendor frames
  15  artisan:37
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

下のエラー内容を見る感じ、ルートのURL([/])でクロージャ―を使っているのが原因なよう。

Unable to prepare route [/] for serialization. Uses Closure.

原因

ルートURLのルーティングを見ると以下のようになっている。

routes\web.php

Route::get('/', function () {
    return view('welcome');
});

この部分はLaravelをインストールしたデフォルトの状態のまま。

原因としてはクロージャ―を使ってビューを直接返すのが良くないらしい。
※ビューではなければクロージャ―使ってもパターンもある。

解決方法

直接ビューを返す場合は以下のように書くのが正しい。
※参照:https://readouble.com/laravel/6.x/ja/routing.html#view-routes

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

これでクロージャを使ってビューを返したのと同じ動作になる。

“php artisan route:cache"を打ち直すとエラーなく完了した。

Laravel

Posted by ton