2015-02-25 8 views
19

Ich bin ein wenig verwirrt darüber, wie das funktionieren soll. Aber ich bekomme einen Route [/preferences/1] not defined Fehler.Laravel 5 Route nicht definiert, während es ist?

In meinem routes.php ich habe:

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

Und in der Ansichtsdatei (Konto/preferences.blade.php) Ich habe:

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

Ich bin einen Fehler bekommen, der mir sagt, 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-Anfragen mit einem bestimmten Parameter definiert und diese in der Ansicht richtig gesetzt.

Was übersehe ich hier?

+0

definieren Sie Ihre Namespaces unter Pfad-Route-Controller. –

+0

werfen Sie einen Blick auf: http://laravel.com/docs/5.0/routing#route-model-binding –

+0

Vielen Dank für Ihre Antwort. Ich dachte, Route-Model-Bindung ist nur notwendig, um ganze Objekte an die Route zu übergeben, nicht nur ein ganzzahliger Parameter? Nichtsdestoweniger habe ich versucht, ein Modell 'user' von' App \ User' auf dem Router zu registrieren, aber das funktioniert immer noch nicht. Habe auch versucht, es mit einer Schließung in der Route zu testen, anstatt die Controller-Methode aufzurufen. – Ben

Antwort

49

Die route() Methode, die aufgerufen wird, wenn Sie ['route' => 'someroute'] in einer Form Öffnung tun will, was eine benannte Route genannt wird. Sie geben eine Route einen Namen wie folgt aus:

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

Das heißt, das zweite Argument der Route in ein Array machen, in dem Sie den Routennamen angeben beide (die as), und auch das, was, wenn das tun Route wird getroffen (uses).

Dann, wenn Sie das Formular öffnen, rufen Sie die Route:

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

nun für eine Route ohne Parameter, die Sie gerade 'route' => 'routename' tun könnten, aber da Sie einen Parameter haben, stellen Sie ein Array statt und liefern Sie die Parameter in der richtigen Reihenfolge.

Alles, was gesagt, da Sie den aktuellen Benutzereinstellungen aktualisieren zu sein scheinen, würde ich Ihnen raten, die Handhabung Controller die ID des aktuell angemeldeten Benutzers, und die Basis der Aktualisierung auf, dass der Check zu lassen - es gibt keine Notwendigkeit, Senden Sie die ID in die URL und die Route, es sei denn, Ihre Benutzer müssen auch die Einstellungen anderer Benutzer aktualisieren. :)

+1

als Follow-up zu dieser Frage, was ist, wenn die Route ist eine Ressource-Route von say generiert. 'Route :: Ressource ('/ Benutzer', 'UserController');', und 'route: list' zeigt, dass es hat ein Name von 'users.update', aber wenn ich versuche, die Route zu generieren, gibt es mir diesen Fehler .. Funktioniert' route() 'nur für explizit benannte Routen? – bruchowski

+0

greatmind, gegraben in die 'FormBuilder.php' Quelle, sieht so aus Das funktioniert' route: ['users.update', user] ' – bruchowski

0

Auf einer seitliche Anmerkung:

hatte ich die ähnlichen Themen, bei denen oft ich die Fehler Aktionsmethode nicht gefunden, aber klar ist es in der Steuerung zu definieren.

Das Problem ist nicht in der Steuerung, sondern vielmehr, wie routes.php Datei ist Setup

Lets sagen Sie Controller-Klasse als eine Ressource in route.php Datei

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

dann ‚/ example gesetzt haben 'werden alle RESTful Ressourcen hier aufgeführt haben: http://laravel.com/docs/5.0/controllers#restful-resource-controllers

aber jetzt wollen Sie einige Definition in Form zB haben: 'action'=>' ExampleController @ postStore‘, dann müssen Sie diese Route ändern (in route.php Datei) bis:

Route::controller('example', 'ExampleController'); 
11

Dieser Thread ist alt, aber war der erste, der aufkam, also dachte ich ID teilen meine Lösung auch. Abgesehen davon, dass Sie Routen in Ihrer routes.php-Datei benannt haben.Dieser Fehler kann auch auftreten, wenn Sie in Ihrer routes-Datei doppelte URLs haben, der Name jedoch mit unterschiedlichen Namen in diesem Szenario irreführend sein kann. 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 Pasting und Müdigkeit werden Sie zu diesem Problem bringen :).

+0

Dies löste das Problem für mich, ich entfernte die Route, die ich für das Register erstellt habe (Route :: get ('/ register', 'Auth \ RegisterController @ getRegister');) und Auth :: routes() die Kontrolle übernehmen – NZSteve

1

In meinem Fall war die Lösung einfach:

ich die Strecke ganz am Anfang der Datei route.php definiert haben.

Nachdem ich die genannte Route nach unten verschoben habe, hat meine App sie endlich gesehen. Es bedeutet, dass die Route irgendwie zu früh definiert wurde.

+0

ja in Laravel 5 benutze einfach name(). Beispiel: Route :: match (['get', 'post'], '/ gericht/update/{id}', 'DishController @ storeUpdate') -> name ('route__name'); redirect() -> route ('route__name', ['id' => $ site-> id]); –

2

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

sollten Sie überprüfen, ob Ihre Route eher innerhalb einer Route ist :: Gruppe

wie hier:

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

wenn so dass Sie es in der View-Datei verwendet werden soll. wie hier:

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