web-dev-qa-db-fra.com

Laravel 5 route non définie, alors qu'elle est?

Je suis un peu confus sur la façon dont cela est supposé fonctionner. Mais je reçois une erreur Route [/preferences/1] not defined.

Dans mon routes.php j'ai:

Route::patch('/preferences/{id}', 'UserController@update');

Et dans le fichier de vue (account/preferences.blade.php), j'ai:

{!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => '/preferences/' . Auth::user()->id]) !!}

Je reçois une erreur en me disant que la route n'existe pas. Je pense que je comprends mal la documentation sur ce sujet mais, à mon avis, j'ai défini un itinéraire pour les demandes PATCH avec un paramètre donné et je l'ai correctement défini dans la vue.

Qu'est-ce que je regarde ici?

47
Ben

La méthode route(), qui est appelée lorsque vous faites ['route' => 'someroute'] dans une ouverture de formulaire, demande ce qu'on appelle un nommé route. Vous donnez à un itinéraire un nom comme celui-ci:

Route::patch('/preferences/{id}',[
    'as' => 'user.preferences.update',
    'uses' => 'UserController@update'
]);

C'est-à-dire que vous créez le second argument de la route dans un tableau, où vous spécifiez le nom de la route (le as), ainsi que la procédure à suivre lorsque la route est atteinte (le uses).

Ensuite, lorsque vous ouvrez le formulaire, vous appelez la route:

{!! Form::model(Auth::user(), [
    'method' => 'PATCH',
    'route' => ['user.preferences.update', Auth::user()->id]
]) !!}

Maintenant, pour une route sans paramètre, vous pouvez simplement faire 'route' => 'routename', mais puisque vous avez un paramètre, vous créez un tableau et vous fournissez les paramètres dans l’ordre.

Cela dit, étant donné que vous semblez mettre à jour les préférences de l'utilisateur actuel, je vous conseillerais de laisser le contrôleur de traitement vérifier l'ID de l'utilisateur actuellement connecté et baser la mise à jour sur ce point - il n'est pas nécessaire d'envoyer l'ID. dans l'URL et la route, sauf si vos utilisateurs doivent également mettre à jour les préférences d'autres utilisateurs. :)

78
Joel Hinz

Ce fil est ancien mais a été le premier à apparaître, alors je pensais que ma solution serait la même. En plus d'avoir nommé routes dans votre fichier routes.php. Cette erreur peut également se produire lorsque vous avez des URL en double dans votre fichier de routes, mais avec des noms différents, l'erreur peut être trompeuse dans ce scénario. Exemple

Route::any('official/form/reject-form}', 'FormStatus@rejectForm')->name('reject-form');  


Route::any('official/form/accept-form', 'FormStatus@acceptForm')->name('reject-form');

Changer l'un des noms résout le problème. Copier coller et la fatigue va vous amener à ce problème :).

25
Bantu

Si route n'est pas défini, vérifiez le fichier de routage web.php.

Route::get('/map', 'NavigationController@map')->name('map'); // note the name() method.

Ensuite, vous pouvez utiliser cette méthode dans les vues:

<a class="nav-link" href="{{ route('map') }}">{{ __('Map') }}</a>

PS: le __ ('Carte') doit traduire "Carte" dans la langue actuelle.

Et la liste des noms d'itinéraires que vous pouvez voir avec la commande artisan:

php artisan route:list
6
ALeX inSide

j'ai eu le même problème et trouver la solution récemment.

vous devriez vérifier si votre route est plutôt à l'intérieur d'une route :: groupe

comme ici:

Route::group(['prefix' => 'Auth', 'as' => 'Auth.', 'namespace' => 'Auth', 'middleware' => 'Auth']

si oui, vous devriez l'utiliser dans le fichier de vue. comme ici:

!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => 'Auth.preferences/' . Auth::user()->id]) !!}
3
Ilyas Kuzu

Mon cas est un peu différent, puisqu'il ne s'agit pas d'un formulaire mais d'un rendu. Ajouter la méthode ->name('route').

MyView.blade.php ressemble à ceci:

<a href="{{route('admin')}}">CATEGORIES</a>

Et le fichier web.php routes est défini comme suit:

Route::view('admin', 'admin.index')->name('admin');
3
entoniperez

J'utilise Laravel 5.7 et j'ai essayé toutes les réponses ci-dessus, mais rien ne semblait frapper la cible.

Pour moi, c'était une solution assez simple en supprimant les fichiers cache créés par Laravel.
Il semblait que mes modifications n’étaient pas prises en compte et mon application ne voyait donc pas les itinéraires.

Un peu exagéré, mais j'ai décidé de réinitialiser tout mon cache en même temps à l'aide des commandes suivantes:

php artisan route:clear
php artisan view:clear
php artisan cache:clear

La principale ici est la première commande qui supprimera le fichier bootstrap/cache/routes.php.
La deuxième commande supprimera les fichiers mis en cache pour les vues stockées dans le dossier storage/framework/cache.
Enfin, la dernière commande effacera le cache de l'application.

2
JustCarty

Dans mon cas, la solution était simple:

J'ai défini la route au tout début du fichier route.php.

Après avoir déplacé la route nommée vers le bas, mon application l'a finalement vue. Cela signifie que la route a été définie trop tôt.

2
Peter

Sur une note de côté:

J'ai eu les mêmes problèmes où plusieurs fois j'obtiens l'erreur Méthode d'action non trouvée, mais c'est clairement défini dans le contrôleur.

Le problème n'est pas dans le contrôleur, mais plutôt comment le fichier routes.php est configuré

Disons que la classe Controller est définie comme ressource dans le fichier route.php

Route::resource('example', 'ExampleController');

alors '/ example' aura toutes les ressources RESTful listées ici: http://laravel.com/docs/5.0/controllers#restful-resource-controllers

mais maintenant vous voulez avoir une définition sous la forme, par exemple: 'action' => 'ExampleController @ postStore', alors vous devez changer cette route (dans le fichier route.php) en:

Route::controller('example', 'ExampleController');
1
star18bit

S'il vous plaît noter que la commande

php artisan route:list

Ou pour obtenir plus de liste de filtrage

php artisan route:list | grep your_route|your_controller

la quatrième colonne vous indique les noms des itinéraires enregistrés (généralement générés par Route :: resource)

0