首页 > 解决方案 > 当我存储评论时,错误:函数的参数太少| 拉拉维尔

问题描述

我正在 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 }}:&lt;/p>
    <div class="flex field my-2">
        <textarea name="content" id="" cols="50" rows="1" class="container border border-gray-300 p-2" placeholder="請輸入回覆內容&quot;>{{ 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>

标签: phplaravelcontroller

解决方案


您正在使用资源路由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');

此致 ;)


推荐阅读