1. ホーム
  2. laravel

[解決済み] laravel Unable to prepare route ... for serialization. クロージャを使う

2023-01-22 05:57:44

質問

Laravel5.2プロジェクトでキャッシュをクリアすると、このエラーメッセージが表示されます。

[LogicException] (ロジック例外) Unable to prepare route [panel] for serialization. クロージャを使用しています。

ルートと関連していると思われる

Route::get('/article/{slug}', 'Front@slug');

は、コントローラ内の特定のメソッドに関連付けられます。

public function slug($slug) {
    $article = Article::where('slug',$slug)->first();

    $id = $article ->id_article ;

    if ( ($article=== null) || (is_null($id)) ) return view('errors/Db');

    else return view('detail')->with(array('article'=> $article,  'title'=>'My title - '.$article->title)); 
}`

要するに、マスタービューから、記事へのショートリンクである$slugを渡して、データベース内でユニークな$slugで、レコードを識別し、その内容を詳細ビューに渡しているのです。

このメソッドを書いたときは何の問題もなく、実際、魅力的に動作しましたが、キャッシュをクリーンアップした後、私はこのエラーを取得し、マスタービューのリンクはショートコードを表示しません。

私はどこで間違っているのでしょうか?

どうすればよいのでしょうか?

<ブロッククオート

ルートが関係していると思います。

Route::get('/article/{slug}', 'Front@slug');

は、コントローラ内の特定のメソッドに関連付けられます。

いいえ、そうではありません。エラーメッセージは route:cache コマンドによるもので、なぜキャッシュをクリアすると自動的にこのコマンドが呼び出されるのかは不明です。

問題は、コントローラの代わりにクロージャを使用したルートで、以下のようなものです。

//                       Thats the Closure
//                             v 
Route::get('/some/route', function() {
    return 'Hello World';
});

クロージャはシリアライズできないため、クロージャを使用するルートがある場合、ルートをキャッシュすることができません。