web-dev-qa-db-fra.com

laravel Impossible de préparer la route ... pour la sérialisation. Fermeture des usages

Lorsque je vide les caches de mon projet Laravel 5.2, le message d'erreur suivant s'affiche:

[LogicException] Impossible de préparer l'itinéraire [panneau] à la sérialisation. Fermeture des usages.

Je pense que c'est lié à un itinéraire

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

associé à une méthode particulière dans mon contrôleur:

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

En bref, d’une vue principale, je passe $ slug, c’est un lien court à l’article, avec $ slug, qui est unique dans la base de données, j’identifie l’enregistrement, puis je passe son contenu à la vue détaillée.

Je n'ai eu aucun problème lorsque j'ai écrit la méthode, en fait cela a fonctionné comme un charme, mais après avoir nettoyé les caches, j'obtiens cette erreur et les liens dans la vue principale ne montrent aucun shortcode.

Où est-ce que je me trompe?

37
Francesco

Je pense que c'est lié à un itinéraire

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

associé à une méthode particulière dans mon contrôleur:

Non ce n'est pas ça. Le message d'erreur provient de la commande route:cache, vous ne savez pas pourquoi l'effacement du cache appelle cela automatiquement.

Le problème est une route qui utilise une fermeture au lieu d'un contrôleur, qui ressemble à ceci:

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

Étant donné que les fermetures ne peuvent pas être sérialisées, vous ne pouvez pas mettre en cache vos routes lorsque vous avez des routes qui utilisent des fermetures.

54
tkausl

Si aucun de vos itinéraires ne contient de fermeture mais que vous obtenez toujours cette erreur, veuillez vérifier.

routes/api.php

Laravel ajoute une route par défaut auth api au fichier ci-dessus (je pense que c'est le cas lorsque nous appelons php artisan make:auth)

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

qui peut être commenté ou remplacé par un appel à la méthode du contrôleur si nécessaire:

26
Manpreet

Laravel propose du code prédéfini dans routes/api.php.

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

qui est désactivé pour être traité par:

php artisan route:cache

Ceci devrait certainement être corrigé par l’équipe Laravel (vérifiez le lien ),

simplement si vous voulez le réparer, vous devez remplacer le code routes\api.php par quelque chose comme:

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

et dans UserController, mettez cette méthode:

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