【发布时间】:2019-10-06 05:59:24
【问题描述】:
在我在 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 身份验证登录和注册,所以我想知道解决这个错误是否是一个简单的修复程序,或者是否还有其他问题?
【问题讨论】:
-
你使用的是什么版本的 Laravel?
@csrf在 5.6+ 中可用 -
我正在使用最新版本的 Laravel 5.8
-
您的
<head>部分中是否还有一个 CSRF 字段,如果有,请尝试删除一个。 -
刚刚尝试通过添加隐藏字段
<input type="hidden" name="_token" value="{{ csrf_token() }}">来修复它,但它出现了一个新错误,即MethodNotAllowedHttpException。现在好像我的路线没有设置为允许 POST。 -
您的路线应该是
Route::put而不是Route::post。