Laravel 5.1从空值创建默认对象

时间:2016-06-30 06:55:01

标签: php laravel laravel-5 laravel-5.1

我使用的是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')

AdminController

 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

3 个答案:

答案 0 :(得分:4)

问题是NULL会返回if(!is_null($product) { //redirect or show an error message } 。添加支票:

action

虽然这是您的更新方法,但您可能在构建此方法的网址时遇到错误。你可能会错误地传递给这条路线。

您的表单<form action="/admin/product/update/{id}" method="POST"> 有错误:

{{ expression }}

请注意大括号,Blade的语法是{},而不只是id。因此,product.update永远不会传递到<form action="/admin/product/update/{{$id}}" method="POST"> 路线。只需将其更改为:

whereNotIn

答案 1 :(得分:1)

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

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

<input name="_method" type="hidden" value="PUT">

答案 2 :(得分:0)

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

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

$ sign缺失:)