在Laravel的一个项目中,我实现了CRUD功能,并在每个功能的视图中放置了一个csrf令牌和一个依赖于功能的请求,即根据PUT更新某些内容。不幸的是,我有两个问题。似乎将@csrf和@method(PUT)放在html页面上的纯文本中,而不是实际在页面中添加相应的功能。同样,例如,当我尝试编辑数据库中的现有条目时,在编辑页面上,出现令牌不匹配异常错误,我不确定为什么。
在控制器中编辑操作:
public function update(Request $request, $id)
{
$blog = Blog::find($id);
$blog->title = $request->title;
$blog->content = $request->content;
$blog->update();
return redirect()->route('blog_path', ['blog' => $blog]);
}
edit.blade.php上的表格:
<form action="{{ route('update_blog_path', ['blog' => $blog->id]) }}" method="POST">
<input type="hidden" name="_method" value="PUT">
@csrf
@method('PUT')
<div class="form-group">
<label for="title">Title</label>
<input type="text" name="title" class="form-control" value="{{ $blog->title}}">
</div>
<div class="form-group">
<label for="content">Content</label>
<textarea name="content" rows="10" class="form-control">{{$blog->content}}</textarea>
</div>
<div class="form-group">
<button type="submit" class="btn btn-outline-primary">Edit Blog Post</button>
</div>
</form>
令牌不匹配错误也不允许我使用标准Laravel身份验证登录和注册,所以我想知道这是否是解决此错误的简单解决方案,或者是否还有其他功能?
答案 0 :(得分:2)
解决方案#1-添加此元标记:
<meta name="csrf-token" content="{{ csrf_token() }}">
解决方案2-像这样添加隐藏的输入:
<input type="hidden" name="_token" value="{{ csrf_token() }}">