如何重定向到我的新帖子,当我创建了一个新的帖子| Laravel



当我在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]);

我已经用我的方法解决了

  1. 从store()函数中删除$id
  2. 在auth()->user()->articles()->create($content)
  3. $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', '文章發表成功!');
}

谢谢

最新更新