it-swarm.com.de

laravel Route kann nicht für die Serialisierung vorbereitet werden. Verwendet Closure

Wenn ich Caches in meinem Laravel 5.2-Projekt lösche, wird folgende Fehlermeldung angezeigt:

[LogicException] Route [panel] kann nicht für die Serialisierung vorbereitet werden. Verwendet Closure.

Ich denke, dass es mit einer Route zusammenhängt

Route::get('/article/{slug}', '[email protected]');

verbunden mit einer bestimmten Methode in meinem Controller:

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)); 
}`

Kurz gesagt, aus einer Master-Ansicht übergebe ich $ slug, das ist ein Kurzlink zum Artikel, mit $ slug, das in der Datenbank eindeutig ist, identifiziere ich den Datensatz und übergebe seinen Inhalt an die Detailansicht.

Ich hatte kein Problem, als ich die Methode geschrieben habe, tatsächlich hat sie wie ein Zauber funktioniert, aber nachdem ich die Caches geleert habe, erhalte ich diesen Fehler und die Links in der Master-Ansicht zeigen keinen Shortcode.

Wo mache ich falsch

37
Francesco

Ich denke, dass es mit einer Route zusammenhängt

Route::get('/article/{slug}', '[email protected]');

verbunden mit einer bestimmten Methode in meinem Controller:

Nein, das ist es nicht. Die Fehlermeldung kommt vom route:cache Befehl, nicht sicher, warum das Löschen des Cache dies automatisch aufruft.

Das Problem ist eine Route, die einen Closure anstelle eines Controllers verwendet, der ungefähr so ​​aussieht:

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

Da Closures nicht serialisiert werden können, können Sie Ihre Routen nicht zwischenspeichern, wenn Sie Routen haben, die Closures verwenden.

54
tkausl

Wenn keine Ihrer Routen Sperren enthält, dieser Fehler jedoch weiterhin auftritt, überprüfen Sie dies

routes/api.php

Laravel fügt der obigen Datei eine Standardauthentifizierungs-API-Route hinzu (ich denke, dies geschieht, wenn wir php artisan make:auth Aufrufen).

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

dies kann kommentiert oder bei Bedarf durch einen Aufruf der Controller-Methode ersetzt werden:

26
Manpreet

Dies ist definitiv ein Fehler. Laravel bietet vordefinierten Code in routes/api.php

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

welches nicht bearbeitet werden kann von:

php artisan route:cache

Dies sollte definitiv vom Laravel Team behoben werden. (Siehe link ),

wenn Sie das Problem beheben möchten, sollten Sie routen\api.php-Code durch Folgendes ersetzen:

Route::middleware('auth:api')->get('/user', '[email protected]');

und in UserController setzen Sie diese Methode:

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