Laravel 5.1 从空值创建默认对象

新手上路,请多包涵

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

“AdminController.php 第 108 行中的错误异常:从空值创建默认对象”。

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

航线

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

编辑.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

原文由 Kristin K 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 255
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">

原文由 Ivanka Todorova 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏