Route::get('/', function () { return view('welcome'); }); Route::resource('photos', 'PhotoController@index');
3 Réponses :
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."
É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:
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
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');