J'utilise le framework Laravel 5.1 PHP. Lorsque j'essaie de mettre à jour mon enregistrement, j'obtiens l'erreur suivante:
"ErreurException dans la ligne AdminController.php 108: Création de l'objet Par défaut à partir d'une valeur vide".
J'ai cherché dans google mais je ne trouve aucun résultat pour résoudre mon problème.
Routes
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
Le problème est que $product = Product::find($id);
renvoie NULL
. Ajouter le chèque:
if(!is_null($product) {
//redirect or show an error message
}
Bien qu'il s'agisse de votre méthode de mise à jour, vous rencontrez probablement une erreur lors de la création de l'URL pour cette méthode. C'est peut-être une mauvaise identité que vous passez sur cette route.
Votre formulaire action
a une erreur:
<form action="/admin/product/update/{id}" method="POST">
Notez les accolades, la syntaxe de Blade est {{ expression }}
, pas seulement {}
. Donc, id
n'est jamais transmis à la route product.update
. Il suffit de le changer pour:
<form action="/admin/product/update/{{$id}}" method="POST">
Pour mettre à jour l'entité, laravel utilisePUTméthode nonPOST. mettre à jour la méthode du formulaire et essayer.
<form action="/admin/product/update/{id}">
<input name="_method" type="hidden" value="PUT">
vérifier si le produit existe puis faire la mise à jour Le formulaire ressemblera à ceci
<form action="/admin/product/update/{{$id}}" method="POST">
Le signe $ manquait :)