Su Myat Noe
Su Myat Noe

Reputation: 13

how to get image url in edit condition in laravel

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

Answers (1)

MD. Jubair Mizan
MD. Jubair Mizan

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

Related Questions