it-swarm.com.de

Laravel 5 Route nicht definiert, während es ist?

Ich bin ein wenig verwirrt darüber, wie das funktionieren soll. Aber ich erhalte einen Route [/preferences/1] not defined - Fehler.

In meiner routes.php habe ich:

Route::patch('/preferences/{id}', '[email protected]');

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

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

Ich erhalte die Fehlermeldung, dass die Route nicht existiert. Ich glaube, ich verstehe die Dokumente zu diesem Thema falsch, aber meiner Meinung nach habe ich eine Route für PATCH-Anforderungen mit einem bestimmten Parameter definiert und dies in der Ansicht richtig eingestellt.

Was übersehe ich hier?

47
Ben

Die route() -Methode, die aufgerufen wird, wenn Sie ['route' => 'someroute'] in einer Formularöffnung möchte, was als benannte Route bezeichnet wird. Sie geben einer Route einen Namen wie diesen:

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

Das heißt, Sie machen das zweite Argument der Route zu einem Array, in dem Sie sowohl den Routennamen (das as) als auch die Aktion angeben, die ausgeführt werden soll, wenn die Route getroffen wird (das 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]
]) !!}

Für eine Route ohne Parameter können Sie einfach '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, empfehle ich Ihnen, die ID des derzeit angemeldeten Benutzers vom Handling Controller überprüfen zu lassen und die Aktualisierung auf dieser Grundlage durchzuführen - 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. :)

78
Joel Hinz

Dieser Thread ist alt, aber er war der erste, der auftauchte. Ich dachte, ich teile auch meine Lösung. Abgesehen davon, dass Sie Routen in Ihrer routes.php-Datei angegeben haben. Dieser Fehler kann auch auftreten, wenn Ihre Routendatei doppelte URLs enthält. Bei unterschiedlichen Namen kann der Fehler in diesem Szenario jedoch irreführend sein. Beispiel

Route::any('official/form/reject-form}', '[email protected]')->name('reject-form');  


Route::any('official/form/accept-form', '[email protected]')->name('reject-form');

Das Ändern der Namen löst das Problem. Copy Pasteing und Fatigue bringen Sie zu diesem Problem :).

25
Bantu

Wenn route nicht definiert ist, überprüfen Sie die Routing-Datei web.php.

Route::get('/map', '[email protected]')->name('map'); // note the name() method.

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

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

PS: die __ ('Map') soll "Map" in die aktuelle Sprache übersetzen.

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

php artisan route:list
6
ALeX inSide

ich hatte das gleiche Problem und finde die Lösung in letzter Zeit.

sie sollten überprüfen, ob sich Ihre Route eher innerhalb einer route :: group befindet

wie hier:

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

wenn ja, sollten Sie es in der Ansichtsdatei verwenden. wie hier:

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

Mein Fall ist ein bisschen anders, da es sich nicht um ein Formular handelt, sondern um eine Ansicht. Füge die Methode ->name('route') hinzu.

MyView.blade.php sieht aus wie das:

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

Und web.php routendatei ist wie folgt definiert:

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

Ich benutze Laravel 5.7 und habe alle oben genannten Antworten ausprobiert, aber nichts schien auf den Punkt zu kommen.

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

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

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

Der Hauptbefehl hier ist der erste Befehl, der die Datei bootstrap/cache/routes.php Löscht.
Der zweite Befehl entfernt die zwischengespeicherten Dateien für die Ansichten, die im Ordner storage/framework/cache Gespeichert sind.
Schließlich wird mit dem letzten Befehl der Anwendungscache geleert.

2
JustCarty

In meinem Fall war die Lösung einfach:

Ich habe die Route ganz am Anfang der route.php - Datei definiert.

Nachdem ich die benannte Route nach unten verschoben hatte, sah meine App sie schließlich. Das bedeutet, dass die Route irgendwie zu früh definiert wurde.

2
Peter

Als Randnotiz:

Ich hatte ähnliche Probleme, bei denen ich oft die Fehler-Aktionsmethode nicht gefunden habe, die aber eindeutig im Controller definiert ist.

Das Problem liegt nicht im Controller, sondern in der Einrichtung der Datei routes.php

Nehmen wir an, Sie haben die Controller-Klasse als Ressource in der Datei route.php festgelegt

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

in '/ example' werden alle RESTful-Ressourcen hier aufgelistet: http://laravel.com/docs/5.0/controllers#restful-resource-controllers

aber jetzt möchten Sie eine Definition in Form haben, z. B .: 'action' => 'ExampleController @ postStore'. Dann müssen Sie diese Route (in der Datei route.php) ändern in:

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

Bitte beachten Sie, dass der Befehl

php artisan route:list

Oder um mehr Filter runter zu bekommen

php artisan route:list | grep your_route|your_controller

in der vierten Spalte werden die Namen der registrierten Routen angezeigt (normalerweise von Route :: resource generiert).

0