Reputation: 13
I am developing a CRUD application using Laravel and I am trying to update data in update condition but if I don't update new image, 'The filename field is required.' appears and I have to choose new image again. Please help how I'm calling the old image. Here is my code:
here is my store and update function in a controller
public function store(Request $request)
{
$this->validate($request, [
'share_name'=>'required',
'share_price'=> 'required|integer',
'share_qty' => 'required|integer',
'filename' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$share = new Share;
$share->share_name = $request->share_name;
$share->share_price = $request->share_price;
$share->share_qty = $request->share_qty;
if($request->hasFile('filename')){
$image= $request->file('filename');
$filename = time() . '.' . $image->getClientOriginalExtension();
$image->move(public_path('images'), $filename);
$share->filename= $filename;
$share->save();
};
$share->save();
return redirect('/shares')
->with('success','Stock added successfully.');
}
public function update(Request $request, $id)
{
$this->validate($request, [
'share_name'=>'required',
'share_price'=> 'required|integer',
'share_qty' => 'required|integer',
'filename' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$share = Share::find($id);
$share->share_name = $request->share_name;
$share->share_price = $request->share_price;
$share->share_qty = $request->share_qty;
if($request->hasFile('filename')){
$dir = 'images/'.$share->filename;
if (File::exists($dir)){
File::delete($dir);
};
$image= $request->file('filename');
$filename = time() . '.' . $image->getClientOriginalExtension();
$image->move(public_path('images'), $filename);
$share->filename= $filename;
$share->save();
};
$share->save();
return redirect('/shares')->with('success', 'Stock has been updated');
}
Here is view
<div class="form-group">
<label for="image">Share Image : </label><br/>
<input type="file" name="filename" id="aa" onchange="pressed()" value={{ $share->share_qty }}/>
Upvotes: 1
Views: 1024
Reputation: 1560
You can't pass a value on your input file tag. On your Controller update method Check the validation if file exists. Check out my answer.
public function update(Request $request, $id){
$this->validate($request, [
'share_name'=>'required',
'share_price'=> 'required|integer',
'share_qty' => 'required|integer'
]);
if($request->hasFile('filename')){
$this->validate($request, [
'filename' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
}
$share = Share::find($id);
$share->share_name = $request->share_name;
$share->share_price = $request->share_price;
$share->share_qty = $request->share_qty;
if($request->hasFile('filename')){
$dir = 'images/'.$share->filename;
if (File::exists($dir)){
File::delete($dir);
};
$image= $request->file('filename');
$filename = time() . '.' . $image->getClientOriginalExtension();
$image->move(public_path('images'), $filename);
$share->filename= $filename;
$share->save();
};
$share->save();
return redirect('/shares')->with('success', 'Stock has been updated');
}
Upvotes: 1