在非对象上调用成员函数getClientOriginalExtension()

时间:2015-01-25 19:33:28

标签: php laravel upload

我试图制作图片上传器,但它总是给我这个错误

在非对象上调用成员函数getClientOriginalName() 这是我的代码控制器代码

public function postSubtitle()
{
    //$video = Video::where('user_id', '=', Auth::id())->find(Input::all('id'));

    var_dump(Input::all());
    $file= Input::file('name');
    echo $file->getClientOriginalExtension();   
}

这是上传表格

{{ form_open({'url': 'video/subtitle', 'files': 'true'}) }}

                    {{ form_file('name', {class: 'form-control'} ) }}
                    {{ form_submit(trans('main.edit'), {class: 'btn btn-lg btn-success btn-block'}) }}
                    {{form_close()}}

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:6)

如果您要处理文件上传,form必须enctype="multipart/form-data"(你可能会这样,但我们不知道你的函数form_open是如何工作的。)

如果你有这个但仍然得到同样的错误,那就意味着你还没有选择任何文件。如果您没有上传文件,Input::file('name')将是null而不是对象。

所以你应该做的是首先检查它是否为空,然后继续处理你的文件。

$file = Input::file('name');
if ($file !== null) {
    echo $file->getClientOriginalExtension();  
}

答案 1 :(得分:1)

我应该记住。仅传递文件路径,例如仅传递输入类型的名称,不传递任何纯文件名。当我们传递错误格式时会发生此错误,因此建议您首先仔细检查,

解决方案在这里:

$image = $request->file('edit_image');
  $destinationPath = public_path('/images');
  $new_name = rand().'.'.$image->getClientOriginalExtension(); 
  $image->move($destinationPath, $new_name);
  PlayersModel::where('id', $edit_user_id)->update($players_Obj);