【问题标题】:Laravel 5.1 Creating default object from empty valueLaravel 5.1 从空值创建默认对象
【发布时间】:2016-06-30 06:55:00
【问题描述】:

我正在使用 Laravel 5.1 PHP 框架。当我尝试更新我的记录时,我收到了错误:

“AdminController.php 第 108 行中的ErrorException:创建默认值 来自空值的对象”。

我在谷歌上搜索过,但找不到任何结果来解决我的问题。

路线

Route::get('/admin/no', 'AdminController@index');
Route::get('/admin/product/destroy/{id}', 'AdminController@destroy');
Route::get('/admin/new', 'AdminController@newProduct');
Route::post('/admin/product/save', 'AdminController@add');
Route::get('/admin/{id}/edit', 'AdminController@edit');
Route::patch('/admin/product/update/{id}', 'AdminController@update')

管理员控制器

 public function edit($id)
    {

        $product = Product::find($id);
        return view('admin.edit', compact('product'));

    }

    public function update(Request $request, $id)
    {

        $product = Product::find($id);
        $product->id = Request::input('id');
        $product->name = Request::input('name');
        $product->description = Request::input('description');
        $product->price = Request::input('price');
        $product->imageurl = Request::input('imageurl');


        $product->save();
        //return redirect('/admin/nο');

    }
    enter code here

edit.blade.php

div class="panel panel-info">
        <div class="panel-heading">
            <div class="panel-title">Edit Product</div>
        </div>
        <div class="panel-body" >
            <form action="/admin/product/update/{id}" method="POST"><input type="hidden" name="_method" value="PATCH"> <input type="hidden" name="_token" value="{{ csrf_token() }}">
    enter code here

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.1


    【解决方案1】:

    问题是$product = Product::find($id); 返回NULL。添加检查:

    if(!is_null($product) {
       //redirect or show an error message    
    }
    

    虽然这是您的更新方法,但您在为此方法构建 url 时可能会出错。您传递到这条路线的 id 可能有误。

    您的表单action 有错误:

    <form action="/admin/product/update/{id}" method="POST">
    

    注意花括号,Blade 的语法是{{ expression }},而不仅仅是{}。所以id 永远不会传递给product.update 路由。只需将其更改为:

    <form action="/admin/product/update/{{$id}}" method="POST">
    

    【讨论】:

    • 在edit.blade.php中,不应该是{{$id}}你忘了$
    • 我对表单操作进行了更改,但什么也没做,我在 RouteCollection.php 第 161 行收到新错误 NotFoundHttpException:
    • @KristinK 只需将其添加到您的表单中:&lt;input name="_method" type="hidden" value="PUT"&gt;
    【解决方案2】:

    对于 laravel 中的更新实体,使用 PUT 方法而不是 POST。更新表单方法并尝试。

    <form action="/admin/product/update/{id}">
    
    <input name="_method" type="hidden" value="PUT">
    

    【讨论】:

    • HTML 表单中没有method="PUT"。只有GETPOST
    【解决方案3】:

    检查产品是否存在然后进行更新 表单将如下所示

    <form action="/admin/product/update/{{$id}}" method="POST">
    

    $ 符号丢失 :)

    【讨论】:

      【解决方案4】:

      检查您的 web.php 文件可能会弄错您的控制器名称。

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      【解决方案5】:

      这可能对其他人的类似问题有所帮助..

      使用$product = Product::where('some_other_id', $id); 代替$product = Product::find($id);。我这样说是因为您可能会像外键而不是主键一样引用 some_other_id。

      【讨论】:

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