【发布时间】:2016-06-23 01:46:30
【问题描述】:
我想更新一个帖子。创建和删除帖子效果很好,但是每当我尝试使用 PATCH 表单更新它时,它都会失败并给出MethodNotAllowedHttpException。
我的路线.php:
...
Route::resource('posts', 'PostsController');
...
这给了我以下可能的路线列表(粘贴在 css 中以保持可读性):
| GET|HEAD | posts | posts.index | App\Http\Controllers\PostsController@index
| POST | posts | posts.store | App\Http\Controllers\PostsController@store
| GET|HEAD | posts/create | posts.create | App\Http\Controllers\PostsController@create
| GET|HEAD | posts/{posts} | posts.show | App\Http\Controllers\PostsController@show
| DELETE | posts/{posts} | posts.destroy | App\Http\Controllers\PostsController@destroy
| PUT|PATCH | posts/{posts} | posts.update | App\Http\Controllers\PostsController@update
| GET|HEAD | posts/{posts}/edit | posts.edit | App\Http\Controllers\PostsController@edit
我的edit.blade.php (url= localhost:8000/posts/1/edit):
{!! Form::model($post, ['method' => 'PATCH', 'action' => ['PostsController@update', $post]]) !!}
@include('posts/_form', array('submitText' => 'Update'))
{!! Form::close() !!}
还有我的 PostsController:
public function update(Request $request, Post $post) {
$post->update($request->all());
return Redirect::route('posts.index')->with('message_succes', 'Post updated');
}
无论我尝试什么,它都失败了
MethodNotAllowedHttpException RouteCollection->methodNotAllowed(array('GET', 'HEAD', 'POST')) RouteCollection.php 第 206 行
查看表单的 html 源代码,PATCH 和令牌已正确插入。 当在表单中将 PATCH 更改为 post 时,它将使用 store 功能并创建一个新帖子。我需要做什么来更新帖子?
【问题讨论】:
-
您应该只传递一个带有表单操作的 id。你使用了
$post。由于您没有共享edit()方法,我们不知道$post变量中的返回值。如果 $post 是一个集合,请使用['PostController@update',$post->id]。如果不行,请分享edit()方法的代码。 -
@smartrahat 是的,你是对的。已经发现我确实发布了完整的对象。它现在正在工作。
标签: forms routes crud laravel-5.2