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}', 'Front@slug');
mit einer bestimmten Methode in meinem Controller verbunden:
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, dh einen Shortlink zum Artikel, mit $ slug, der in der Datenbank eindeutig ist. Ich identifiziere den Datensatz und übergebe seinen Inhalt an die Detailansicht.
Ich hatte kein Problem, als ich die Methode schrieb, tatsächlich funktionierte sie wie ein Zauber, aber nachdem ich die Caches bereinigt habe, erhalte ich diesen Fehler und die Links in der Master-Ansicht zeigen keinen Shortcode.
Wo mache ich falsch?
quelle
Antworten:
Nein, das ist es nicht. Die Fehlermeldung kommt vom
route:cache
Befehl, nicht sicher, warum das Löschen des Caches dies automatisch aufruft.Das Problem ist eine Route, die anstelle eines Controllers einen Closure 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.
quelle
Wenn keine Ihrer Routen Sperrungen enthält, Sie aber dennoch diesen Fehler erhalten, überprüfen Sie dies bitte
Laravel hat in der obigen Datei eine Standard-Auth-API-Route.
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
Diese kann bei Bedarf kommentiert oder durch einen Aufruf der Controller-Methode ersetzt werden.
quelle
Dies ist definitiv ein Fehler. Larvel bietet vordefinierten Code in route / api.php
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
die nicht verarbeitet werden kann von:
Dies sollte auf jeden Fall vom Laravel-Team behoben werden (siehe Link ).
Wenn Sie das Problem beheben möchten, sollten Sie einfach den Code route \ api.php durch Folgendes ersetzen:
Route::middleware('auth:api')->get('/user', 'UserController@AuthRouteAPI');
und in UserController setzen Sie diese Methode:
public function AuthRouteAPI(Request $request){ return $request->user(); }
quelle
Überprüfen Sie Ihre Routen / web.php und Routen / api.php
Laravel wird standardmäßig in der Datei route / web.php geschlossen:
Route::get('/', function () { return view('welcome'); });
und Routen / api.php
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
Wenn Sie das entfernen, versuchen Sie erneut, den Routen-Cache zu löschen.
quelle
Die eigentliche Lösung dieses Problems besteht darin, die erste Zeile in web.php zu ändern
Ersetzen Sie einfach die Begrüßungsroute durch die folgende Route
Route::view('/', 'welcome');
Wenn immer noch der gleiche Fehler als Sie wahrscheinlich
quelle
die Lösung, wenn wir Routen wie diese verwenden:
Route::get('/', function () { return view('welcome'); });
Laravel nennt sie Closure, sodass Sie die Verwendung von Routen nicht optimieren können. Closures müssen Sie zur Verwendung an den Controller weiterleiten
php artisan optimize
quelle
Wenn noch jemand nach einer Antwort sucht, lag das Problem für mich in der Datei route / web.php. Beispiel:
Route::get('/', function () { return view('welcome'); });
Es ist auch Route, also ja ... Entfernen Sie es einfach, wenn es nicht benötigt wird, und Sie können loslegen! Sie sollten auch den Antworten von oben folgen.
quelle
Überprüfen Sie, ob Ihre web.php- Datei diese Erweiterung hat
use Illuminate\Support\Facades\Route;
Mein Problem wurde auf diese Weise behoben.
quelle