我正在laravel中构建一个非常简单的CRUD,只是为了了解这个框架。 它的工作原理就像一个魅力,但我无法使控制器的更新功能正常工作。
我的情况:
1)我使用artisan命令构建资源控制器。
2)我使用刀片构建表单视图,然后使用以下代码打开表单:
<!-- 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
效果很好,每个领域都填充了正确的数据。 表单操作的生成网址为:
http://localhost/mysite/task/2
问题在于,当我提交此表单时,我收到此错误:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
有人能理解为什么吗?我可以帮你提供更多信息吗?
答案 0 :(得分:9)
你需要'method'=&gt; '放'。
{{ Form::model($task, array('route' => array('task.update', $task->id), 'files' => true, 'method' => 'PUT')) }}
正如你在这里看到的那样。
http://laravel.com/docs/controllers#resource-controllers
Verb: PUT/PATCH
Path: /resource/{id}
action: update
route: resource.update
编辑:要触发update() - 操作,您必须向路由resource.update
发送PUT或PATCH请求,例如task.update
。
答案 1 :(得分:0)
表单操作有问题。假设您有这样的路线:
Route::post('task/update/{id}, function()
{
});
然后,您的模型绑定表单应为:
{{ Form::model($task, array('url'=>array('task/update',$task->id),'files'=>true)) }}
答案 2 :(得分:0)
代码中唯一的错误是您没有将PUTor PATCH作为HTTP方法传递给服务器。
在这些状态下触发Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException。
演示模型表格将为
Form::model($name_model, array('action' => array('Controller_name@method', $argument), 'files' => true, 'method' => 'PUT'))
或路线名称为
Form::model($name_model, array('route' => array('route.name', $argument), 'files' => true, 'method' => 'PUT'))