Kiedy czyszczę pamięci podręczne w moim projekcie Laravel 5.2, widzę ten komunikat o błędzie:
[LogicException] Nie można przygotować trasy [panel] do serializacji. Używa zamknięcia.
Myślę, że jest to związane z trasą
Route::get('/article/{slug}', 'Front@slug');
związane z określoną metodą w moim kontrolerze:
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));
}`
Krótko mówiąc, z widoku głównego przekazuję $ slug, czyli skrót do artykułu, za pomocą $ slug, który jest unikalny w bazie danych, identyfikuję rekord, a następnie przekazuję jego zawartość do widoku szczegółowego.
Nie miałem żadnego problemu, kiedy pisałem metodę, w rzeczywistości działała jak urok, ale po wyczyszczeniu pamięci podręcznych pojawia się ten błąd i linki w widoku głównym nie pokazują żadnego shortcode.
Gdzie ja robię źle?
laravel
serialization
routes
Francesco
źródło
źródło
Odpowiedzi:
Nie, to nie to. Komunikat o błędzie pochodzi z
route:cache
polecenia, nie jestem pewien, dlaczego wyczyszczenie pamięci podręcznej wywołuje to automatycznie.Problemem jest trasa, która używa Closure zamiast kontrolera, co wygląda mniej więcej tak:
// Thats the Closure // v Route::get('/some/route', function() { return 'Hello World'; });
Ponieważ zamknięć nie można serializować, nie można buforować tras w przypadku tras, które używają zamknięć.
źródło
Jeśli żadna z twoich tras nie zawiera zamknięć, ale nadal pojawia się ten błąd, sprawdź
Laravel ma domyślną trasę auth api w powyższym pliku.
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
które w razie potrzeby można skomentować lub zastąpić wywołaniem metody kontrolera.
źródło
To z pewnością błąd, ponieważ Laravel oferuje predefiniowany kod w plikach route / api.php
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
które nie mogą być przetwarzane przez:
To zdecydowanie powinno zostać naprawione przez zespół Laravel. (Sprawdź link ),
po prostu jeśli chcesz to naprawić, powinieneś zamienić kod route \ api.php na coś takiego:
Route::middleware('auth:api')->get('/user', 'UserController@AuthRouteAPI');
aw UserController umieść tę metodę:
public function AuthRouteAPI(Request $request){ return $request->user(); }
źródło
Rzeczywistym rozwiązaniem tego problemu jest zmiana pierwszego wiersza w web.php
Po prostu zastąp trasę powitalną następującą trasą
Route::view('/', 'welcome');
Jeśli nadal pojawia się ten sam błąd, niż prawdopodobnie
źródło
Sprawdź swoje trasy / web.php i Routes / api.php
Laravel jest dostarczany z domyślnym zamknięciem trasy w route / web.php:
Route::get('/', function () { return view('welcome'); });
i route / api.php
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
jeśli to usuniesz, spróbuj ponownie wyczyścić pamięć podręczną tras.
źródło
rozwiązanie, gdy korzystamy z takich tras:
Route::get('/', function () { return view('welcome'); });
Laravel nazywa je Zamknięciem, więc nie można optymalizować tras używanych jako Zamknięcia, których należy kierować do kontrolera
php artisan optimize
źródło
Jeśli ktoś nadal szuka odpowiedzi, to u mnie problem był w pliku route / web.php. Przykład:
Route::get('/', function () { return view('welcome'); });
To także Route, więc tak ... Po prostu usuń go, jeśli nie jest potrzebny i możesz jechać! Powinieneś także postępować zgodnie z odpowiedziami udzielonymi z góry.
źródło
sprawdź, czy Twój plik web.php ma to rozszerzenie
use Illuminate\Support\Facades\Route;
mój problem został rozwiązany w ten sposób.
źródło