我正在创建一个允许用户创建博客帖子的laravel应用程序。
我已经创建了一个PostsController作为具有存储功能的资源,如下所示:
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required',
'body' => 'required'
]);
return 123;
}
此外,我在web.php中添加了一条路线
Route::resource('posts', 'PostsController');
如果我使用php artisan php artisan show:routes
列出路由,则会列出POST方法:
HTML表单如下:
<form action="PostsController@store" method="POST">
<div class="form-group">
<label for="title">Title</label>
<input class="form-control" type="text" id="title">
</div>
<div class="form-group">
<label for="body">Body</label>
<textarea class="form-control" id="body" rows="3"></textarea>
</div>
<input type="submit" class="btn btn-primary">
</form>
提交表单时,出现MethodNotAllowedHttpException:
The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE.
我以前曾经使用laravel集体形式。 laravel有一段时间没有做任何工作,现在似乎已弃用(https://laravelcollective.com/),因此我求助于经典HTML形式。我该如何解决?
答案 0 :(得分:4)
您的操作在表单中不正确-您需要将操作指向路由的URL,然后路由将选择方法,在这种情况下为“存储”方法。另外,添加@csrf
以获得更多信息CSRF Protection
<form action="{{ route('posts.store') }}" method="POST">
@csrf
<div class="form-group">
<label for="title">Title</label>
<input class="form-control" type="text" id="title">
</div>
<div class="form-group">
<label for="body">Body</label>
<textarea class="form-control" id="body" rows="3" name="body"></textarea>
</div>
<input type="submit" class="btn btn-primary">
</form>
答案 1 :(得分:1)
在文本框和文本区域中添加名称
form action="{{ route('posts.store') }}" method="POST">
@csrf
<div class="form-group">
<label for="title">Title</label>
<input class="form-control" type="text" id="title" name="title">
</div>
<div class="form-group">
<label for="body">Body</label>
<textarea class="form-control" id="body" rows="3" name="body"></textarea>
</div>
<input type="submit" class="btn btn-primary">
</form>