2016-06-30 14 views
5

Tôi đang sử dụng khung công tác PHP Laravel 5.1. Khi tôi cố gắng cập nhật hồ sơ của mình, tôi gặp lỗi:Laravel 5.1 Tạo đối tượng mặc định từ giá trị rỗng

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

Tôi đã tìm kiếm trong google nhưng tôi không thể tìm thấy kết quả nào để giải quyết vấn đề của mình.

đường

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 

Trả lời

4

Vấn đề là t mũ $product = Product::find($id); trả lại NULL. Thêm séc:

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

Mặc dù đây là phương pháp cập nhật của bạn, vì vậy có thể bạn đang gặp lỗi khi tạo url cho phương pháp này. Nó có thể là một id sai bạn đang đi đến tuyến đường này.

Biểu mẫu của bạn action có một lỗi:

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

Chú ý các dấu ngoặc nhọn, cú pháp Blade là {{ expression }}, không chỉ {}. Vì vậy, id không bao giờ được chuyển đến tuyến đường product.update. Chỉ cần thay đổi nó để:

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

trong edit.blade.php, không nên là '{{$ id}}' bạn quên '$ { –

+0

Bạn đúng. –

+0

Tôi thực hiện các thay đổi đối với mẫu hành động nhưng không có gì, tôi gặp lỗi mới NotFoundHttpException trong đường RouteCollection.php 161: –

0

kiểm tra nếu sản phẩm tồn tại sau đó làm việc cập nhật Mẫu này sẽ trông giống như

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

$ dấu hiệu này đã mất tích :)

1

Đối với cập nhật thực trong laravel sử dụng phương pháp PUT không phải POST. cập nhật phương thức biểu mẫu và thử.

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

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

Không có 'method =" PUT "' trong các biểu mẫu HTML. Chỉ 'GET' và' POST'. –

+0

có, tôi đã cập nhật câu trả lời của mình. –

Các vấn đề liên quan