2
votes

Impossible de préparer la route [api / utilisateur] pour la sérialisation. Utilise la fermeture - Laravel

Route::get('/', function () {
    return view('welcome');
});
Route::resource('photos', 'PhotoController@index');

0 commentaires

3 Réponses :


2
votes

Ce n'est pas un bug. Vous ne pouvez pas utiliser de routes basées sur la fermeture comme ça si vous souhaitez mettre en cache les routes. Dirigez tout itinéraire basé sur la fermeture vers une méthode de contrôleur à la place et tout ira bien. [Vous en avez un dans web.php et l'erreur en api.php un dans api.php ]

L'itinéraire basé sur la fermeture que vous avez dans web.php pourrait être remplacé par:

Route::middleware('auth:api')->get('user', 'SomeController@user');

Cela le dirigerait vers un contrôleur qui gère simplement le retour des fichiers de vue.

La route basée sur la fermeture dans api.php doit pointer vers un contrôleur:

Route::view('/', 'welcome');

Considérez tous les itinéraires fournis avec le projet laravel/laravel comme étant fonctionnels, mais à des fins de démonstration.

"Les routes basées sur la fermeture ne peuvent pas être mises en cache. Pour utiliser la mise en cache d'itinéraire, vous devez convertir toutes les routes de fermeture en classes de contrôleur."

Laravel 5.8 - Docs - Contrôleurs - Route Caching


0 commentaires

1
votes

ÉDITER:

À PARTIR DE LARAVEL 8.X, VOUS POUVEZ ÉGALEMENT CACHER DES ROUTES BASÉES SUR LA FERMETURE

Lorsque vous exécutez la commande php artisan route:cache

Laravel mettra en cache toutes vos routes et les stockera dans le pilote de cache spécifié

Maintenant à votre message d'erreur:

Comme le message d'erreur indique clairement que

Les itinéraires de fermeture ne peuvent pas être mis en cache

Et même le Laravel Docs dit que Route Caching

Par défaut Laravel est livré avec quatre fichiers de routes

Et cela aura 2 itinéraires basés sur la fermeture

Solution:

  1. Vous pouvez les supprimer si vous n'utilisez plus ces itinéraires
  2. Créez un contrôleur et déplacez-le vers le contrôleur

LogicException: impossible de préparer l'itinéraire [api / user]

Ce qui signifie que

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

Ce code dans Vos routes / api.php est à l'origine du problème.

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

Ou vous pouvez supprimer cela si vous ne l'utilisez pas


0 commentaires

0
votes

Vous ne pouvez pas utiliser de méthode spécifique lorsque vous utilisez une ressource pour le routage.

Vous pouvez utiliser

Route::get('photos', 'PhotoController@index');

Ou

Route::resource('photos', 'PhotoController');


0 commentaires