2016-06-30 7 views
5

Ich verwende Laravel 5.1 PHP-Framework. Wenn ich versuche, meinen Rekord zu aktualisieren, erhalte ich die Fehlermeldung:Laravel 5.1 Erstellen von Standard-Objekt von leeren Wert

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

ich in google gesucht, aber ich kann keine Ergebnisse finden, um mein Problem zu lösen.

Routes

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 

Antwort

4

Das Problem ist, t Hut $product = Product::find($id);NULL zurückgibt. Fügen Sie die Kontrolle:

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

Obwohl dies Ihre Update-Methode ist, so wahrscheinlich sind Sie einen Fehler, während die URL für diese Methode zu bauen. Es könnte eine falsche ID sein, die Sie an diese Route weitergeben.

Ihre Form action hat einen Fehler:

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

Beachten Sie die geschweiften Klammern, Blade-Syntax ist {{ expression }}, nicht nur {}. So wird id nie auf die product.update Route geleitet. ändern Sie es einfach an:

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

in edit.blade.php, sollte es nicht sein '{{$ id}}' Sie haben vergessen, den '$' –

+0

Sie richtig sind. –

+0

ich Änderungen Aktion aber nichts zu bilden, ich neue Fehler NotFoundHttpException Linie in RouteCollection.php erhalten 161: –

0

prüfen, ob das Produkt noch vorhanden ist, dann das Update Die Form aussehen wird wie folgt

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

$ -Zeichen wurde fehlt :)

1

Für Aktualisierungsentität in Laravel verwendet PUT Methode nicht POST. Aktualisieren Sie die Formularmethode und versuchen Sie es.

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

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

In HTML-Formularen gibt es kein 'method =" PUT "'. Nur "GET" und "POST". –

+0

Ja, ich habe meine Antwort aktualisiert. –