9

我在 laravel 中构建了一个非常简单的 CRUD,只是为了了解这个框架。它就像一个魅力,但我不能让控制器的更新功能正常工作。

这是我的情况:

1)我使用工匠命令构建资源控制器。

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

它工作得很好,每个字段都充满了正确的数据。表单操作的生成 url是:

http://localhost/mysite/task/2

问题是,当我提交此表单时,我收到此错误:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

有人能理解为什么吗?我可以帮助您了解更多信息吗?

4

3 回答 3

9

你需要“方法”=>“放”。

{{ 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() 动作,您必须向路由发送 PUT 或 PATCH 请求resource.update,在您的情况下task.update

于 2013-07-03T11:00:39.930 回答
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'))
于 2014-01-22T19:32:48.153 回答
0

您的表单操作有问题。假设您有这样的路线:

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

});

然后,您的模型绑定表单应该是:

{{ Form::model($task, array('url'=>array('task/update',$task->id),'files'=>true)) }}
于 2013-07-03T11:00:16.353 回答