Laravel sagt “Route nicht definiert”

Lesezeit: 6 Minuten

Benutzer-Avatar
Ben Fransen

In meiner routes.php habe ich:

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

Und in der Ansichtsdatei (account/preferences.blade.php) habe ich:

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

Aber ich bekomme diesen Fehler:

Route [/preferences/1] nicht definiert

Ein ähnlicher Fehler tritt beim Aufrufen der route() Helfer direkt:

route('/preferences/' . Auth::user()->id');

Ich glaube, ich verstehe die Dokumentation zu diesem Thema falsch, aber ich habe eine Route für PATCH-Anforderungen mit einem bestimmten Parameter definiert und diese in der Ansicht korrekt eingestellt. Was übersehe ich hier?

  • Definieren Sie Ihre Namespaces unter Path Route Controller.

    – Safoor Safdar

    25. Februar 2015 um 8:51 Uhr

  • schau mal nach: laravel.com/docs/5.0/routing#route-model-binding

    – Safoor Safdar

    25. Februar 2015 um 8:51 Uhr

  • Danke für deine Antwort. Ich dachte, die Routenmodellbindung ist nur erforderlich, um ganze Objekte an die Route zu übergeben, nicht nur einen ganzzahligen Parameter? Trotzdem habe ich versucht, ein Modell zu registrieren user von App\User an den Router, aber das funktioniert immer noch nicht. Auch versucht, es mit einer Schließung in der Route zu testen, anstatt die controllers-Methode aufzurufen.

    – Ben Fransen

    25. Februar 2015 um 9:06 Uhr


Das route() -Methode, die aufgerufen wird, wenn Sie dies tun ['route' => 'someroute'] in einer Formularöffnung, will das, was a genannt wird benannte Strecke. Sie geben einer Route einen Namen wie diesen:

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

Das heißt, Sie machen das zweite Argument der Route zu einem Array, in dem Sie sowohl den Routennamen (die as) und was zu tun ist, wenn die Route getroffen wird (die uses).

Wenn Sie dann das Formular öffnen, rufen Sie die Route auf:

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

Nun, für eine Route ohne Parameter könnten Sie einfach tun 'route' => 'routename'aber da Sie einen Parameter haben, erstellen Sie stattdessen ein Array und geben die Parameter der Reihe nach an.

Da Sie anscheinend die Einstellungen des aktuellen Benutzers aktualisieren, würde ich Ihnen raten, den behandelnden Controller die ID des derzeit angemeldeten Benutzers überprüfen zu lassen und die Aktualisierung darauf zu stützen – es ist nicht erforderlich, die ID einzusenden in der URL und der Route, es sei denn, Ihre Benutzer müssen auch die Einstellungen anderer Benutzer aktualisieren. 🙂

  • Was ist, wenn die Route eine Ressourcenroute ist, die beispielsweise aus … generiert wird? Route::resource('/users', 'UserController');und route:list zeigt, dass es einen Namen hat users.updateaber wenn ich versuche, die Route zu generieren, gibt es mir diesen Fehler route() nur für explizit benannte Routen funktionieren?

    – Bruchowski

    6. April 2015 um 23:15 Uhr


  • egal, eingegraben in die FormBuilder.php Quelle, sieht so aus, als ob das funktioniert route: ['users.update', user]

    – Bruchowski

    6. April 2015 um 23:25 Uhr

  • Mein Problem war, dass ich nicht erkannt habe, dass meine Route innerhalb einer Gruppe liegt. Was erforderte, dass ich dem Namen, den ich eingegeben hatte, ein Präfix hinzufügen musste.

    – Hossein

    16. Juni 2019 um 11:45 Uhr

Benutzer-Avatar
Bantu-

Dieser Thread ist alt, aber er war der erste, der aufgetaucht ist, also dachte ich, ich teile auch meine Lösung. Abgesehen davon, dass Sie Routen in Ihrer benannt haben routes.php Datei. Dieser Fehler kann auch auftreten, wenn Sie doppelte URLs in Ihrer Routendatei haben, aber mit unterschiedlichen Namen kann der Fehler in diesem Szenario irreführend sein. Beispiel:

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

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

Das Ändern eines der Namen löst das Problem. Kopieren, Einfügen und Ermüdung können Sie zu diesem Problem führen :).

  • Dies hat das Problem für mich gelöst, ich habe die Route entfernt, die ich für das Register erstellt habe (Route::get(‘/register’, ‘Auth\RegisterController@getRegister’);) und Auth::routes() die Kontrolle übernehmen lassen

    – Steve

    18. Juli 2017 um 7:59 Uhr

  • vielen Dank, ich war verrückt danach. Auf jeden Fall gibt es Probleme mit doppelten URLs, selbst wenn Sie unterschiedliche Namen haben. 🙂

    – Hashaam Ahmed

    15. Oktober 2018 um 8:55 Uhr

Benutzer-Avatar
ALeX inSide

Wenn keine Route definiert ist, überprüfen Sie die Routing-Datei web.php.

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

Dann können Sie diese Methode in den Ansichten verwenden:

<a class="nav-link" href="https://stackoverflow.com/questions/28714675/{{ route("map') }}">{{ __('Map') }}</a>

PS: Das __(‘Map’) soll “Map” in die aktuelle Sprache übersetzen.

Und die Liste der Namen für Routen, die Sie mit handwerklichem Befehl sehen können:

php artisan route:list

  • Vielen Dank! Dank an php artisan route:list Ich stellte fest, dass ich in zwei Routen dieselbe URL definiert hatte: '/same/url/in/both/routes'. Deshalb wurde eine davon nicht in der Routenliste aufgeführt.

    – Pathos

    8. Oktober 2019 um 17:20 Uhr


  • Vielen Dank! Rettete mich! route(‘about’) war aus irgendeinem Grund nicht zugänglich, bis ich ->name(‘about’) auf die web.php-Datei für die Route angewendet habe.

    – Jeremy

    13. Juni 2020 um 15:08 Uhr

Ich verwende Laravel 5.7 und habe alle oben genannten Antworten ausprobiert, aber nichts schien den Punkt zu treffen.

Für mich war es eine ziemlich einfache Lösung, indem die von Laravel erstellten Cache-Dateien entfernt wurden.
Es schien, dass meine Änderungen nicht wiedergegeben wurden und meine Anwendung daher die Routen nicht sah.

Ein bisschen übertrieben, aber ich habe mich entschieden, meinen gesamten Cache gleichzeitig mit den folgenden Befehlen zurückzusetzen:

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

Der wichtigste hier ist der erste Befehl, der die löscht bootstrap/cache/routes.php Datei.
Der zweite Befehl entfernt die zwischengespeicherten Dateien für die Ansichten, die in der gespeichert sind storage/framework/cache Mappe.
Schließlich löscht der letzte Befehl den Anwendungscache.

wenn Sie den Befehl ausführen

php artisan route:list

Dort sehen Sie alle Ihre registrierten Routen in Tabellenform. Nun, da sehen Sie viele Spalten wie Method , URI , Name , Action .. etc.

Also im Grunde, wenn Sie verwenden Route() Methode, das heißt, es wird nur akzeptiert Name Spaltenwerte und wenn Sie verwenden möchten URI Spaltenwerte, die Sie verwenden sollten URL() Laravel-Methode.

Benutzer-Avatar
Adiyya Tadikamalla

Noch eine Ursache dafür:

Wenn die Routen werden mit demselben URI überschrieben (Unwissentlich) verursacht es diesen Fehler:

Z.B:

Route::get('dashboard', ['uses' => 'SomeController@index', 'as' => 'my.dashboard']);
Route::get('dashboard/', ['uses' => 'SomeController@dashboard', 'as' => 'my.home_dashboard']);

In diesem Fall ist die Route „my.dashboard“ ungültig, da beide Routen denselben URI haben („dashboard“, „dashboard/“).

Lösung: Sie sollten den URI für beide ändern

Z.B:

Route::get('dashboard', ['uses' => 'SomeController@index', 'as' => 'my.dashboard']);
Route::get('home-dashboard', ['uses' => 'SomeController@dashboard', 'as' => 'my.home_dashboard']); 

// Sehen Sie, dass sich der URI für dieses ‘Home-Dashboard’ geändert hat

Hoffe es hilft einigen einmal.

Mein Fall ist etwas anders, da es sich nicht um ein Formular handelt, sondern um eine Ansicht. Methode hinzufügen ->name('route').

MyView.blade.php sieht aus wie das:

<a href="https://stackoverflow.com/questions/28714675/{{route("admin')}}">CATEGORIES</a>

Und web.php Die Routendatei ist wie folgt definiert:

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

1344800cookie-checkLaravel sagt “Route nicht definiert”

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy