2016-04-14 9 views
2

Ich versuche ein Formular in Laravel zu erstellen, um einige Daten zu aktualisieren. begann mich mit Hilfe der folgenden in meiner Klinge Vorlage füllen Sie das Formular mit Daten aus einem Modell aus:Laravel Formular erzeugt falsche Aktion URL/Route Fehler

{{ Form::model($sensor, array('action' => '[email protected]', $sensor->s_id)) }}  

$ Sensor senden zu der Ansicht von der Steuerung auf diese Weise:

return view('settings.sensors.edit')->with('sensor', App\Sensor::find($sensorId)) 

Die Dokumentation ist nicht klar darüber, ob ich auch Form :: open verwenden muss oder nicht, aber das form open-Tag wurde bereits erstellt, also dachte ich, das würde reichen.

In meinen Routen Ich habe diese Routen:

Route::get('/settings/sensors/edit/{sensorId}',['as' => 'sensor.edit', 'uses' => '[email protected]']); 
Route::post('/settings/sensors/edit/{sensorId}',['as' => 'sensor.edit', 'uses' => '[email protected]']); 

ich die Form wie http://localhost:8000/settings/sensors/edit/105, indem Sie auf eine URL zugreifen konnte, arbeitete die Vorbelegung mit Daten aus dem Modell wie ein Charme.

Das Problem, das ich hatte, war, dass der Submit-Button jetzt funktioniert. Es würde an http://localhost:8000/settings/sensors/edit/%7BsensorId%7D reichen Offensichtlich wurde der sensorId Parameter nicht richtig ersetzt.

schrieb ich das Formular :: Modell Funktionsaufruf nach einigen googeln dazu:

{{ Form::model($sensor, array('route' => route('sensor.edit',$sensor->s_id)), $sensor->s_id) }}  

Wenn ich die Seite jetzt öffnen, ich diesen Fehler direkt erhalten: Route [http://localhost:8000/settings/sensors/edit/105] nicht

definierte das scheint Seltsam, da ich die Routen nicht geändert habe und eine Route für diese URL definiert wurde. Irgendeine Idee, wo ich falsch liege?

Antwort

1

Sie duplizieren im Wesentlichen den Routenaufruf. Wenn Sie Form::model($sensor, array('route' => tun, weiß Laravel bereits, dass Sie versuchen, auf eine benannte Route zuzugreifen, und erwartet einen Routennamen. Wenn Sie also route(...) tun, konvertiert es zuerst diesen Routenaufruf, bevor er nach einer Route mit dem Namen sucht.

Mit anderen Worten, es beschwert sich nicht, dass die Seite http://localhost:8000/settings/sensors/edit/105 nicht existiert - es beschwert sich, dass keine Route das als as Name hat.

Entfernen Sie es und ersetzen Sie es stattdessen durch ein Array mit dem Namen der Route und dem Parameter. Dann können Sie auch die extra $sensor->s_id, wie folgt loswerden:

{{ Form::model($sensor, array('route' => array('sensor.edit', $sensor->s_id))) }} 
+0

danke, das hat tatsächlich mein Problem gelöst – ErikL