You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel编辑文章时出现Missing Required Parameter参数缺失错误如何解决

错误原因梳理

你遇到的报错和$article为null的问题是三个不匹配导致的:

  1. 资源路由参数名和控制器、模板传参名不匹配
  2. 表单提交路由选错,cms.edit是展示编辑页的GET路由,不是处理编辑提交的路由
  3. 模板变量输出语法错误

具体修复步骤

1. 修复参数名不匹配的问题

你用Route::resource('cms', articlesController::class)生成的路由,默认参数名是cm(Laravel会自动把资源名转成单数作为参数名),和你控制器里注入的$article变量名不匹配,导致隐式模型绑定失效,$article是空实例所以id为null。

两种修复方案选一种即可:

  • 方案1:修改控制器方法参数名和路由参数一致
// 把edit方法的参数名从$article改成$cm
public function edit(Article $cm)
{
    return view('cms.edit')
    ->with('article',$cm) // 还是把变量赋值给article传到模板,不用改模板其他地方
    ->with('categories',Category::all())
    ->with('tags',Tag::all());
}
  • 方案2:强制资源路由使用你需要的参数名,避免后续混淆
// 修改路由定义,指定参数名为article
Route::resource('cms', articlesController::class)->parameters([
    'cms' => 'article'
]);

2. 修复表单提交路由错误

你当前表单的action写的是cms.edit路由,这个路由是用来展示编辑页面的GET路由,提交编辑数据应该用cms.update路由,同时参数名要和路由要求的一致:

<!-- 原来的action替换成下面的,如果用了路由改参数的方案2,参数名就写article,用方案1就写cm -->
<form method="POST" action="{{ route('cms.update', ['article' => $article->id]) }}" enctype="multipart/form-data">

3. 修复模板变量输出语法错误

  1. 所有变量输出都要加{{ }}包裹,不能直接写value="$article->title"
  2. textarea标签没有value属性,内容要放在标签闭合前
  3. 移除@foreach后面多余的?>标签
<!-- 修复后的表单字段示例 -->
<div class="mb-3">
  <input type="text" name="title" class="form-control" id="title" value="{{ $article->title }}">
</div>
<div class="mb-3">
  <textarea type="text" class="form-control" id="description" name="description" rows="5">{{ $article->description }}</textarea>
</div>
<div class="mb-3">
  <input type="file" class="form-control" name="image" id="image">
</div>
<div class="mb-3">
  <textarea type="text" name="content" class="form-control" id="content" rows="15">{{ $article->content }}</textarea>
</div>
<div class="mb-3">
  <select class="form-select" name="tag" aria-label="Default select example">
      @foreach ($tags as $tag)
        <option value="{{$tag->id}}" {{ $article->tag_id == $tag->id ? 'selected' : '' }}> {{$tag->name}} </option>
      @endforeach
  </select>
</div>
<div class="mb-3">
  <select class="form-select" name="category" aria-label="Default select example">
    @foreach ($categories as $category)
      <option value="{{$category->id}}" {{ $article->category_id == $category->id ? 'selected' : '' }}> {{$category->name}} </option>
    @endforeach
  </select>
</div>

内容的提问来源于stack exchange,提问作者Mehrabt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:54:03