【问题标题】:Error: Creating default object from empty value (laravel)错误:从空值创建默认对象(laravel)
【发布时间】:2019-06-19 18:05:02
【问题描述】:

所以我只想用 Laravel 简单地更新一下。

这是错误:

这是我的控制者

 public function update(Request $request, $id)
{
     $request->validate([
        'category_fam'=>'required',
        'student_name'=>'required',
        'parent_name'=>'required',
        'grade'=>'required',
        'phone'=>'required',
        'email'=>'required',
    ]);
    $contact                = contact::find($id);
    $contact->category_fam  = $request->get('category_fam');
    $contact->student_name  = $request->get('student_name');
    $contact->parent_name   = $request->get('parent_name');
    $contact->grade         = $request->get('grade');
    $contact->phone         = $request->get('phone');
    $contact->email         = $request->get('email');
    $contact->save();

    return redirect()->route('contact')->with('success','Contact updated successfully');
}

这是我的观点,上面的错误指向:

<form action="{{ route('contact.edit.update',$contact->id) }}" method="POST">
@csrf
@method('PATCH')
<div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12">
        <div class="form-group form-box">
            <label for="category_fam">Category Family</label>
            <div class="radio">
              <label><input type="radio" name="category_fam" id="category_fam" value="Student" checked> Student</label>
            </div>
            <div class="radio">
              <label><input type="radio" name="category_fam" id="category_fam" value="Parent"> Parent</label>
            </div>
            <div class="radio">
              <label><input type="radio" name="category_fam" id="category_fam" value="Other"> Other</label>
            </div>
        </div>
    </div>

这是我的路线:

Route::post('/contact/edit', 'WC\ContactController@update')->name('contact.edit.update');

那么如何解决这个问题?其他控制器工作正常,我按照模式进行更新。

【问题讨论】:

  • 我们能看到您的路线,尤其是这条路线 ::contact.edit.update 吗?
  • 你没有该id的数据
  • 我已经发布了我的路线
  • 你能更新你的路线和模型来回答这个问题吗?
  • 使用您的浏览器通过检查元素来检查选项标签是否真的获得了价值。您也可以尝试将数据库中的 category_fam 字段设为可为空

标签: laravel


【解决方案1】:

据我所知,您没有从您的请求中获得任何数据。在更新之前,您是否尝试过 dd() 您的请求?另外,在您的表单中,我注意到在您的开头使用“POST”方法,但在下面定义“PATCH”方法。还有一件事,您在尝试保存之前是否在表单中输入了任何数据?

【讨论】:

  • POSTPATCH 方法是正确的。这就是 Laravel 处理 update 的方式。
  • 所以当我尝试使用 dd() 或 print_r() 时,它会给出“函数的参数很少”
  • 你是这样用的吗:dd($contact)
  • @RouhollahMazarei 从未见过这样使用它。谢谢你的回答。
  • 是的,我就是这样用的 dd($contact)
【解决方案2】:

根据您的表格,您的路线不正确。在表单中,您有PATCH 方法,因此路线必须是patch。最重要的是,您必须在路由定义中放入变量:

Route::patch('/contact/edit/{id}', 'WC\ContactController@update')->name('contact.edit.update');

【讨论】:

    【解决方案3】:

    你可以做两件事,首先你可以更新你的路线:

    来自帖子

    Route::post('/contact/edit', 'WC\ContactController@update')->name('contact.edit.update');
    

    打补丁

    Route::patch('/contact/edit', 'WC\ContactController@update')->name('contact.edit.update');
    

    或者,您可以在表单中删除此@method('PATCH'),它仍应与路线中的帖子一起使用..

    所有这些检查您是否在控制器中获取数据:

    dd($id) and also dd(contact::find($id));
    

    祝你好运..

    【讨论】:

    • 我应该在表单操作中使用什么方法?
    • 但我收到此错误“此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE。”
    • 它在我的视线下方
    【解决方案4】:

    在我改变之后

    $contact = contact::find($id);
    to 
    $contact = contact::find(1);
    

    效果很好

    谢谢大家

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 2018-07-18
      相关资源
      最近更新 更多