当我在Laravel中创建新帖子时,我想重定向到我的新帖子
但是我得到一个ArgumentCountError
Too few arguments to function AppHttpControllersArticlesController::store(), 1 passed in C:xampphtdocsforumvendorlaravelframeworksrcIlluminateRoutingController.php on line 54 and exactly 2 expected
我该如何修复它?由于
web.php
<?php
Route::resource('articles', ArticlesController::class);
Route::get('/', [ArticlesController::class, 'index'])->name('root');
Route::resource('articles.comments', CommentsController::class);
ArticlesController.php
public function store(Request $request, $id) {
$content = $request->validate([
'title' => 'required|max:30',
'content' => 'required|min:10'
]);
//限制只有透過登入才能CREATE文章
auth()->user()->articles()->create($content);
return redirect('articles/'. $id)->with('notice', '文章發表成功!');
}
create.blade.php
<form class="container-fluid" action="{{ route('articles.store') }}" method="post">
检查您的store()
方法。我认为它应该只得到Request $request
。
public function store(Request $request) {
$content = $request->validate([
'title' => 'required|max:30',
'content' => 'required|min:10'
]);
//限制只有透過登入才能CREATE文章
$article = Article::create($content); // static is not best practice, only for example
return redirect('articles/'. $article->id)->with('notice', '文章發表成功!');
}
但是在使用create方法之前,您需要指定一个可填充的或保护的。检查文档
大概你需要/有一种方式来查看一篇文章,无论它是否刚刚被添加,所以在你的web.php你会想要一个GET请求通过传递它的ID来检索文章:
Route::get('/article/{id}', [ArticleController::class, 'viewArticle'])-> name('article.view');
那么您需要POST请求来添加新文章:
Route::post('/addarticle', [ArticleController::class, 'addArticle'])-> name('article.add');
在你的ArticleController中,在你的addArticle方法的末尾,一旦你的新文章被创建,你就可以返回一个重定向到你的"查看文章"。route引用它的名称,并传入它期望的参数——新文章的ID——作为路由的一部分,如下所示:
$article = new Article();
... populate the article's details here ...
return redirect()->route('article.view', ['id' => $article->id]);
我已经用我的方法解决了
- 从store()函数中删除$id
- 在auth()->user()->articles()->create($content)
- $id改为$article->id from redirect()
例子
public function store(Request $request) {
$content = $request->validate([
'title' => 'required|max:30',
'content' => 'required|min:10'
]);
$article = auth()->user()->articles()->create($content);
return redirect('articles/'. $article->id)->with('notice', '文章發表成功!');
}
谢谢