2013-07-03 16 views
9

Ich baue eine wirklich einfache CRUD in Laravel nur um etwas über dieses Framework zu lernen. Es funktioniert alles wie ein Charme, aber ich kann nicht die Update-Funktion eines Controllers ordnungsgemäß funktionieren.Laravel: Form Modell Bindung und Ressourcen-Controller Fehler

Hier ist meine Situation:

1) Ich baue eine Ressourcensteuerung Handwerker-Befehl.

2) Ich baue eine Formularansicht Klinge und ich Öffnen Sie das Formular mit diesem Code:

<!-- Form --> 
@if($mode=="edit") 
    {{ Form::model($task, array('route'=>array('task.update',$task->id),'files'=>true)) }} 
@else 
    {{ Form::open(array('route'=>'task.store','files'=>true)) }} 
@endif 

Es funktioniert gut und jedes Feld mit den richtigen Daten gefüllt. Die generieren URL der Aktion des Form ist:

http://localhost/mysite/task/2 

Das Problem ist, dass, wenn ich dieses Formular abgesendet ich diesen Fehler:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException 

Jemand kann verstehen, warum? Kann ich Ihnen mit weiteren Informationen helfen?

Antwort

9

Sie benötigen 'Methode' => 'setzen'.

{{ Form::model($task, array('route' => array('task.update', $task->id), 'files' => true, 'method' => 'PUT')) }}

Wie Sie hier sehen können.

http://laravel.com/docs/controllers#resource-controllers

Verb:  PUT/PATCH 
Path:  /resource/{id} 
action: update 
route: resource.update 

EDIT: Um das Update starten() - Aktion müssen Sie task.update eine PUT oder PATCH-Anfrage auf die Route resource.update, in Ihrem Fall senden.

0

Sie haben ein Problem mit der Formularaktion. Angenommen, Sie haben eine Route wie folgt aus:

Route::post('task/update/{id}, function() 
{ 

}); 

Dann Modell gebundener Form sein sollte:

{{ Form::model($task, array('url'=>array('task/update',$task->id),'files'=>true)) }} 
0

Der einzige Fehler in Ihrem Code ist, dass Sie PUTor PATCH nicht als HTTP-Methode für die Formularübergabe an den Server übergeben haben.

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException wird bei solchen Zuständen ausgelöst.

wird eine Demo-Modell Form als seine

Form::model($name_model, array('action' => array('[email protected]', $argument), 'files' => true, 'method' => 'PUT')) 

oder mit Routennamen wie

Form::model($name_model, array('route' => array('route.name', $argument), 'files' => true, 'method' => 'PUT'))