web-dev-qa-db-ja.com

laravelシリアル化のためのルートを準備できません...クロージャーを使用

Laravel 5.2プロジェクトのキャッシュをクリアすると、次のエラーメッセージが表示されます。

[LogicException]シリアル化のためにルート[パネル]を準備できません。クロージャーを使用します。

ルートと関係があると思う

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を渡します。レコードを特定し、その内容を詳細ビューに渡します。

メソッドを作成したときに問題はありませんでしたが、実際には魅力のように機能しましたが、キャッシュを消去した後、エラーが発生し、マスタービューのリンクにショートコードが表示されません。

どこで間違っていますか?

37
Francesco

ルートと関係があると思う

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

私のコントローラーの特定のメソッドに関連付けられています:

いいえ、そうではありません。エラーメッセージはroute:cacheコマンドから来ています。キャッシュをクリアするとこれが自動的に呼び出される理由はわかりません。

問題は、コントローラーの代わりにクロージャーを使用するルートです。これは次のようになります。

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

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

54
tkausl

ルートに閉包が含まれていないが、このエラーが引き続き発生する場合は、確認してください

routes/api.php

Laravelはデフォルトの認証APIルートを上記のファイルに追加します(php artisan make:authを呼び出すときに追加します)

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

必要に応じて、コメント化するか、コントローラーメソッドの呼び出しに置き換えることができます。

26
Manpreet

これは間違いなくバグです。Laravelはroutes/api.phpで事前定義されたコードを提供します

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

次の方法では処理できません。

php artisan route:cache

これは間違いなくLaravelチームで修正する必要があります( link を確認してください)。

単に修正したい場合は、routes\api.phpコードを次のようなものに置き換える必要があります。

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

そして、UserControllerに次のメソッドを配置します。

 public function AuthRouteAPI(Request $request){
    return $request->user();
 }
7
IBRAHIM EZZAT