php - 当我存储评论时,错误:函数的参数太少| 拉拉维尔
问题描述
我正在 Laravel 中构建评论功能。
当我在我的网站中存储评论时,它会出现出现错误消息的问题。[在此处输入图片描述][1]
请问我该如何解决?
我现在发布代码
网页.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ArticlesController;
use App\Http\Controllers\CommentsController;
use App\Models\Article;
Route::resource('articles', ArticlesController::class);
Route::get('/', [ArticlesController::class, 'index'])->name('root');
Route::resource('articles.comments', CommentsController::class);
Route::middleware(['auth:sanctum', 'verified'])->get('/userhome', function () {
return view('userhome');
})->name('userhome');
Route::get('/userhome', function() {
// 利用SQL WHERE印出用戶發表過的所有資料到HOME
$articles = Article::where("user_id", Auth::user()->id)->orderByDesc('id')->paginate(5);
return view('userhome', ['articles' => $articles]);
})->name('userhome');
Auth::routes();
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
评论控制器.php
<?php
namespace App\Http\Controllers;
use App\Models\Comment;
use Illuminate\Http\Request;
class CommentsController extends Controller
{
public function store(Request $request, $id) {
$request->validate([
'content' => 'required'
]);
$data = new Comment;
$data->user_id = $request->user()->id;
$data->article_id = $id;
$data->content = $request->content;
$data->save();
return redirect()->route('root')->with('notice', '文章發表成功!');
// return redirect('articles/'. $id)->with('notice', '回覆發表成功!');
}
}
show.blade.php
<form class="container-fluid" action="{{ route('articles.comments.store')}}" method="post">
@csrf
<p>{{ Auth::user()->name }}:</p>
<div class="flex field my-2">
<textarea name="content" id="" cols="50" rows="1" class="container border border-gray-300 p-2" placeholder="請輸入回覆內容">{{ old('content')}}</textarea>
<div class="actions">
<button type="submit" class="px-3 py-3 ml-2 rounded bg-gray-200 hover:bg-gray-300 text-nowrap">回覆</button>
</div>
</div>
</form>
解决方案
您正在使用资源路由中CommentsController
定义的web.php
Route::resource('comments', CommentsController::class);
如果您使用php artisan route:list
命令查看您的路由模式,您将看到/comments
带有 POST 方法的路由指向您在CommentsController中的store()方法,该方法是为您的应用程序定义的以及其他 6 个资源路由,因为您在 web.php 中定义了资源路由
如您所见/comments
,没有任何参数(例如/comments/{id}
),因此您的 store() 方法不能像您写的那样有两个参数
❌public function store(Request $request, $id)
✅ 相反,将文章的 id 作为隐藏的表单输入嵌入,然后在 store() 方法中获取它,例如
public function store(Request $request) {
$data->article_id = $request->input('article_id');
此致 ;)
推荐阅读
- excel - 在 VBA Excel 中引用范围函数内的命名偏移地址
- javascript - 如何从 websocket 动态添加 React 组件
- r - 按 R 中日期差异汇总的分组方式
- batch-file - 批处理 - 查找给定字符串中某个字符的出现
- java - Spring Data JPA - ManyToMany - JPQL - 存储库中的@Query 形成
- javascript - 我在使用 javascript 编辑 css 时遇到问题
- node.js - 错误:EBUSY:资源繁忙或锁定,rmdir
- android - 如何异步调用 HTTP Post API?
- .net - GCP: 403 调用者没有权限
- java - 返回两个数组的排序组合