2016-06-30 41 views
5

我正在使用Laravel 5.1 PHP框架。當我嘗試更新我的紀錄,我得到的錯誤:Laravel 5.1從空值創建默認對象

"ErrorException in AdminController.php line 108: Creating default object from empty value".

我已經在谷歌搜索,但我找不到任何結果,以解決我的問題。

路線

Route::get('/admin/no', '[email protected]'); 
Route::get('/admin/product/destroy/{id}', '[email protected]'); 
Route::get('/admin/new', '[email protected]'); 
Route::post('/admin/product/save', '[email protected]'); 
Route::get('/admin/{id}/edit', '[email protected]'); 
Route::patch('/admin/product/update/{id}', '[email protected]') 

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 

回答

4

問題是噸帽子$product = Product::find($id);返回NULL。添加支票:

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

儘管這是您的更新方法,因此您可能在爲此方法構建網址時出現錯誤。這可能是您傳遞給此路線的錯誤標識。

您的形式action有一個錯誤:

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

注意花括號,刀片的語法{{ expression }},不只是{}。所以id永遠不會傳遞給product.update路由。如果產品存在,那麼就更新 的形式看起來像這樣

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

$符號失蹤 :)

+2

in edit.blade.php,它不應該是'{{$ id}}'你忘了'$' –

+0

你是對的。 –

+0

我做了更改形式的行動,但沒有什麼,我得到新的錯誤NotFoundHttpException在RouteCollection.php行161: –

0

檢查:只要將其更改爲在laravel使用PUT方法不是POST。更新表單方法並嘗試。

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

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

對於更新實體

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

HTML表單中沒有'method =「PUT」'。只有'GET'和'POST'。 –

+0

是的,我已經更新了我的答案。 –

相關問題