user3810794
user3810794

Reputation: 273

Call to a member function getClientOriginalExtension() on a non-object error

I am trying to edit/update my image upload but I am getting "Call to a member function getClientOriginalExtension() on a non-object" error. please help

My controller:

public function update(Request $request, $id)
{
      $lnkupdate=Request::all();

    $links=Links::findorFail($id);
    $file = Input::file('image');
  $random_name = str_random(8);
  $destinationPath = 'albums/';
  $extension = $file->getClientOriginalExtension();
  $filename=$random_name.'_link_logo.'.$extension;
  $uploadSuccess = Input::file('image')->move($destinationPath, $filename);
  ConsularGen::update(array(
    'name'=>Input::get('name'),
    'link' => Input::get('link'),
    'image' => $filename,
    ));
}

View:

{!!Form::model($links,['method'=>'PATCH','action'=>['LinksController@update',$links->id]])!!}
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
  <label for="image">Select a logo</label>
         {!!Form::file('image')!!}
        </div>

<div class="form-goup">
{!!Form::label('name','Name')!!}
{!!Form::text('name',null,['class'=>'form-control'])!!}
</div>

    <div class="form-goup">
{!!Form::label('link','Link')!!}
{!!Form::text('link',null,['class'=>'form-control'])!!}

</div>
<div class="form-group">
<button type="submit" class="btnbtn-default">Add</button>
</div>
{!!Form::close()!!}

Route:

Route::patch('admin/links/{id}/update','LinksController@update');

Upvotes: 1

Views: 1454

Answers (2)

Vikash
Vikash

Reputation: 219

Your file has not uploaded successfully. you are trying to run getClientOriginalExtension() on a null file thats's why you are getting this error

Upvotes: 0

patricus
patricus

Reputation: 62338

Uploading files requires the html form to specify enctype="multipart/form-data". If you don't have this, the file will not be uploaded, Input::file('image') will return null, and you'll get the error you're seeing.

The Laravel Form builder will add this to your form if you tell it that it needs to handle files. Add 'files' => true to your array in the form:

{!! Form::model($links, ['method'=>'PATCH', 'files' => true, 'action'=>['LinksController@update', $links->id]]) !!}

Once this is fixed, you'll also get this error if you don't actually select a file to be uploaded. You should wrap your file handing inside a check to hasFile. Something like:

public function update(Request $request, $id)
{
    $lnkupdate=Request::all();

    if (Input::hasFile('image')) {
        $links=Links::findorFail($id);
        $file = Input::file('image');
        $random_name = str_random(8);
        $destinationPath = 'albums/';
        $extension = $file->getClientOriginalExtension();
        $filename=$random_name.'_link_logo.'.$extension;
        $uploadSuccess = Input::file('image')->move($destinationPath, $filename);
        ConsularGen::update(array(
            'name'=>Input::get('name'),
            'link' => Input::get('link'),
            'image' => $filename,
        ));
    } else {
        echo 'no file uploaded. oops.';
    }
}

Upvotes: 1

Related Questions