在非对象错误

时间:2016-02-24 05:05:59

标签: php laravel upload

我正在尝试编辑/更新我的图片上传但我得到“对非对象调用成员函数getClientOriginalExtension()”错误。请帮忙

我的控制器:

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,
    ));
}

查看:

{!!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::patch('admin/links/{id}/update','LinksController@update');

2 个答案:

答案 0 :(得分:1)

上传文件需要html表单指定enctype="multipart/form-data"。如果你没有这个,那么该文件将不会被上传,Input::file('image')将返回null,并且您将收到您所看到的错误。

如果您告诉Laravel表单构建器需要处理文件,它将把它添加到您的表单中。以下列格式将'files' => true添加到您的数组中:

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

修复此问题后,如果您实际上没有选择要上传的文件,也会收到此错误。你应该把你的文件包装在支票里面hasFile。类似的东西:

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.';
    }
}

答案 1 :(得分:0)

您的文件未成功上传。 您试图在空文件上运行getClientOriginalExtension(),这就是您收到此错误的原因