Laravel 5.4 - 更新资源
Laravel 5.4 - Updating a resource
我正在创建一个博客 post 来学习 Laravel 5.4 并且正在努力寻找任何关于如何在任何地方更新 Post 的示例。
我的表格如下
<form method="POST" action="/posts/{{ $post->id }}/edit">
{{ csrf_field() }}
<div class="form-group">
<label for="title">Title</label>
<input name="title" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" value="{{ $post->title }}" required>
</div>
<div class="form-group">
<label for="description">Description</label>
<input name="description" type="text" class="form-control" id="exampleInputPassword1" value="{{ $post->title }}" required>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Update</button>
</div>
</form>
我的路线如下
Route::get('/posts/{post}/edit', 'PostsController@edit');
Route::patch('/posts/{post}', 'PostsController@update');
我的控制器方法是
public function edit( Post $post )
{
return view('posts.edit', compact('post'));
}
public function update(Request $request, Post $post )
{
Post::where('id', $post)->update($request->all());
return redirect('home');
}
我收到 MethodNotAllowedHTTPException
错误,但我不确定我错了哪一部分。
我假设它一定是我使用 PATCH 函数的点,或者可能只是我批量分配新值的方式。任何帮助将不胜感激。
你应该使用
{{ method_field('PATCH') }}
作为您的表单域
并将操作更改为
/posts/{{ $post->id }}
像这样:
<form method="POST" action="/posts/{{ $post->id }}">
{{ csrf_field() }}
{{ method_field('PATCH') }}
<div class="form-group">
<label for="title">Title</label>
<input name="title" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" value="{{ $post->title }}" required>
</div>
<div class="form-group">
<label for="description">Description</label>
<input name="description" type="text" class="form-control" id="exampleInputPassword1" value="{{ $post->title }}" required>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Update</button>
</div>
</form>
您错过了一些事情。
首先,正如@Maraboc 在评论中指出的那样,您需要添加方法欺骗作为标准 HTML 表单仅允许 GET
和 POST
方法:
<input type="hidden" name="_method" value="PATCH">
或
{{ method_field('PATCH') }}
https://laravel.com/docs/5.4/routing#form-method-spoofing
然后您还需要在表单操作中省略 "edit" uri:
<form method="POST" action="/posts/{{ $post->id }}">
或
<form method="POST" action="{{ url('posts/' . $post->id) }}">
https://laravel.com/docs/5.4/controllers#resource-controllers
(稍微向下滚动到 资源控制器处理的操作 部分)
您可能还会发现观看 https://laracasts.com/series/laravel-5-from-scratch/episodes/10
很有帮助
希望对您有所帮助!
构建 API 时,您可能需要一个位于 Eloquent 模型和实际返回给应用程序用户的 JSON 响应之间的转换层。 Laravel 的资源 类 允许您轻松地将您的模型和模型集合转换为 JSON。
我正在创建一个博客 post 来学习 Laravel 5.4 并且正在努力寻找任何关于如何在任何地方更新 Post 的示例。
我的表格如下
<form method="POST" action="/posts/{{ $post->id }}/edit">
{{ csrf_field() }}
<div class="form-group">
<label for="title">Title</label>
<input name="title" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" value="{{ $post->title }}" required>
</div>
<div class="form-group">
<label for="description">Description</label>
<input name="description" type="text" class="form-control" id="exampleInputPassword1" value="{{ $post->title }}" required>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Update</button>
</div>
</form>
我的路线如下
Route::get('/posts/{post}/edit', 'PostsController@edit');
Route::patch('/posts/{post}', 'PostsController@update');
我的控制器方法是
public function edit( Post $post )
{
return view('posts.edit', compact('post'));
}
public function update(Request $request, Post $post )
{
Post::where('id', $post)->update($request->all());
return redirect('home');
}
我收到 MethodNotAllowedHTTPException
错误,但我不确定我错了哪一部分。
我假设它一定是我使用 PATCH 函数的点,或者可能只是我批量分配新值的方式。任何帮助将不胜感激。
你应该使用
{{ method_field('PATCH') }}
作为您的表单域
并将操作更改为
/posts/{{ $post->id }}
像这样:
<form method="POST" action="/posts/{{ $post->id }}">
{{ csrf_field() }}
{{ method_field('PATCH') }}
<div class="form-group">
<label for="title">Title</label>
<input name="title" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" value="{{ $post->title }}" required>
</div>
<div class="form-group">
<label for="description">Description</label>
<input name="description" type="text" class="form-control" id="exampleInputPassword1" value="{{ $post->title }}" required>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Update</button>
</div>
</form>
您错过了一些事情。
首先,正如@Maraboc 在评论中指出的那样,您需要添加方法欺骗作为标准 HTML 表单仅允许 GET
和 POST
方法:
<input type="hidden" name="_method" value="PATCH">
或
{{ method_field('PATCH') }}
https://laravel.com/docs/5.4/routing#form-method-spoofing
然后您还需要在表单操作中省略 "edit" uri:
<form method="POST" action="/posts/{{ $post->id }}">
或
<form method="POST" action="{{ url('posts/' . $post->id) }}">
https://laravel.com/docs/5.4/controllers#resource-controllers
(稍微向下滚动到 资源控制器处理的操作 部分)
您可能还会发现观看 https://laracasts.com/series/laravel-5-from-scratch/episodes/10
很有帮助希望对您有所帮助!
构建 API 时,您可能需要一个位于 Eloquent 模型和实际返回给应用程序用户的 JSON 响应之间的转换层。 Laravel 的资源 类 允许您轻松地将您的模型和模型集合转换为 JSON。