Php Laravel 8表格更新数据库
我正在创建一个简单的博客网站,在Laravel8中具有CRUD功能。在使用不推荐使用的Laravel表单之前,我已经这样做了,但现在我尝试使用HTML表单。Php Laravel 8表格更新数据库,php,html,laravel,forms,Php,Html,Laravel,Forms,我正在创建一个简单的博客网站,在Laravel8中具有CRUD功能。在使用不推荐使用的Laravel表单之前,我已经这样做了,但现在我尝试使用HTML表单。 然而,我对网站的更新部分有一些问题。我有一个名为BlogsController的控制器,可以调用这个函数来更新数据库中的blog,当用户提交表单进行更新时,应该调用这个函数。 博客控制器更新功能 public function update(Request $request, $id) { $this->va
然而,我对网站的更新部分有一些问题。我有一个名为BlogsController的控制器,可以调用这个函数来更新数据库中的blog,当用户提交表单进行更新时,应该调用这个函数。
博客控制器更新功能
public function update(Request $request, $id)
{
$this->validate($request, [
'title' => 'required',
'body' => 'required',
'category' => 'required',
'description' => 'required',
'read_time' => 'required'
]);
$blog = Blog::find($id);
$blog->title = $request->input('title');
$blog->body = $request->input('body');
$blog->category = $request->input('category');
$blog->description = $request->input('description');
$blog->read_time = $request->input('read_time');
$blog->user_id = auth()->user()->id;
$blog->save();
return redirect('/dashboard')->with('success', 'Blog Updated');
}
表单需要指向什么操作更新表单顶部
<form method="POST" action="update">
以Laravel形式实施
{!! Form::open(['action' => ['App\Http\Controllers\BlogsController@update', $blog->id], 'method' => 'POST']) !!}
您可以通过运行
$php artisan路由:列表
对于您的博客更新路径,您应该使用
<form method="POST" action="{{ route('blog.update', ['blog' => $blog]) }}">
@method('PATCH')
</form>
@方法('补丁')
在模板中
通过使用
@csrf
,请参阅Laravel文档,确保您在表单中正确设置了令牌。我假设您正在使用资源路由实现CRUD功能。在这种情况下,资源控制器中的Update方法通过PUT方法而不是POST调用。因此,在表单中,只需添加以下内容即可将表单提交方法更改为:
<input name="_method" type="hidden" value="PUT">
此外,在表单声明中,您必须添加如下目的地路由:
<form method="POST" action="{{ route('blog.update', $blog->id) }}">
拉威尔最酷的一件事是。那是什么意思?我们可以在您的update
方法中执行类似的操作
// BlogController.php
public function update(Request $request, Blog $blog) {
$request->validate([
'title' => 'required',
'body' => 'required',
'category' => 'required',
'description' => 'required',
'read_time' => 'required'
]);
$blog->title = $request->title;
$blog->body = $request->body;
$blog->category = $request->category;
$blog->description = $request->description;
$blog->read_time = $request->read_time;
if ($blog->save()) {
return redirect('/dashboard')->with('success', 'Blog Updated');
} else {
// handle error.
}
}
在模板中,您需要确保使用的是PATCH
方法:
<form method="POST" action="{{ route('blog.update', ['blog' => $blog]) }}">
@csrf
@method('PATCH')
...
</form>
@csrf
@方法('补丁')
...
您还可以选择使用操作
获取注册路由的URL:
action('App\Http\Controllers\BlogsController@update', ['blog' => $blog])
检查所有路线列表:
$ php artisan route:list
您的路线应该是:
<form method="POST" action="{{ route('blog.update', ['blog' => $blog]) }}">
{{csrf_field()}}
{{ method_field('PATCH') }}
</form>
{{csrf_field()}}
{{method_字段('PATCH')}
谢谢,这很有效。我正在尝试做一些类似的删除现在,但由于某种原因,我只是得到重定向到显示后,而不是删除它。知道我做错了什么吗
对于delete,使用相同的语法:method=“post”
和@method('delete')
@ThomasRead您应该添加csrf令牌。。。当您打开表单时,表单生成器会为您添加此库。此库已从core中删除,并由laravel collective接管:
<form method="POST" action="{{ route('blog.update', ['blog' => $blog]) }}">
{{csrf_field()}}
{{ method_field('PATCH') }}
</form>