【问题标题】:I had getting this error on update function (Call to a member function getClientOriginalExtension() on null)我在更新函数时收到此错误(在 null 上调用成员函数 getClientOriginalExtension())
【发布时间】:2019-11-21 22:20:05
【问题描述】:
public function update(Request $request, $emp_id)
{
    $validator  = Validator::make($request->all(), [
        'emp_code'      => 'required|max:255',
        'first_name'    => 'required|max:255',
        'last_name'     => 'required|max:255',
        'emp_image'     => 'required|image|mimes:jpeg,jpg,png,PNG,JPEG,JPG|max:2048',
        'department'    => 'required|max:255',
        'designation'   => 'required|max:255',
        'joining_date'  => 'required|max:255',
        'offer_letter'  => 'required|mimes:doc,docx,pdf,DOC,DOCX,PDF|max:2048',
        'emp_email'     => 'required|email|max:255|unique:employees',
        'mobile_number' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:10',
    ]);

    $employeeimg = rand() . '.' . request()->emp_image->getClientOriginalExtension();
    request()->emp_image->move(public_path('images'), $employeeimg);

    $offerletter = rand() . '.' . request()->offer_letter->getClientOriginalExtension();
    request()->offer_letter->move(public_path('docs/new'), $offerletter);

    $form_data = array(
        'emp_code'      => $request->emp_code,
        'first_name'    => $request->first_name,
        'last_name'     => $request->last_name,
        'emp_image'     => $employeeimg,
        'department'    => $request->department,
        'designation'   => $request->designation,
        'joining_date'  => $request->joining_date,
        'offer_letter'  => $offerletter,
        'emp_email'     => $request->emp_email,
        'mobile_number' => $request->mobile_number,
    );

    $data = Employee::findOrFail($emp_id);

    //dd($form_data);
    $data->update($form_data);

    return redirect('employee')->with('msg_success', 'Employee updated successfully!');
}

我在使用文件上传更新表单时出错。错误是

在 null 上调用成员函数 getClientOriginalExtension()

请给出解决方案

【问题讨论】:

  • 首先检查$request->hasFile('emp_image'),然后继续获取文件的getClientOriginalExtension。或添加到验证数组 'emp_image' => 'file|required|image|mimes:jpeg,jpg,png,PNG,JPEG,JPG|max:2048',
  • 关注链接REF
  • 你能在这里详细告诉我 $employeeimg = rand() 吗? '。' . request()->emp_image->getClientOriginalExtension(); request()->emp_image->move(public_path('images'), $employeeimg);
  • $file = $request->file('emp_image');然后 $file->getClientOriginalExtension();
  • 没有得到兄弟..仍然是同样的错误

标签: laravel


【解决方案1】:

首先,您需要签入请求has进行归档。

if($request->hasFile('emp_image')){
    if (Input::file('emp_image')->isValid()) {
        @unlink(IMG_PATH_URL.( $records->emp_image) );
        $file = Input::file('emp_image');            
        $ext  = $file->getClientOriginalExtension();
        $mainFilename1 = rand().'.'.$ext;
        $file->move(public_path('images'), $mainFilename);            
    }
}


if($request->hasFile('offer_letter')){
    if (Input::file('offer_letter')->isValid()) {
        @unlink(IMG_PATH_URL.( $records->offer_letter) );
        $file = Input::file('offer_letter');            
        $ext  = $file->getClientOriginalExtension();
        $mainFilename2 = rand().'.'.$ext;
        $file->move(public_path('docs/new'), $mainFilename);            
    }
}

确保您已在表单中添加了 enctype

<form action="" method="post" enctype="multipart/form-data">
</form>

你的控制器应该是这样的:

public function update(Request $request, $emp_id)
{
    $validator  = Validator::make($request->all(), [
        'emp_code'      => 'required|max:255',
        'first_name'    => 'required|max:255',
        'last_name'     => 'required|max:255',
        'emp_image'     => 'required|image|mimes:jpeg,jpg,png,PNG,JPEG,JPG|max:2048',
        'department'    => 'required|max:255',
        'designation'   => 'required|max:255',
        'joining_date'  => 'required|max:255',
        'offer_letter'  => 'required|mimes:doc,docx,pdf,DOC,DOCX,PDF|max:2048',
        'emp_email'     => 'required|email|max:255|unique:employees',
        'mobile_number' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:10',
    ]);

    $data = Employee::findOrFail($emp_id);
    if($data){

        $data->emp_code      = $request->emp_code;
        $data->first_name    = $request->first_name;
        $data->last_name     = $request->last_name;       
        $data->department    = $request->department;
        $data->designation   = $request->designation;
        $data->joining_date  = $request->joining_date;        
        $data->emp_email     = $request->emp_email;
        $data->mobile_number = $request->mobile_number;

        if($request->hasFile('emp_image')){
            if (Input::file('emp_image')->isValid()) {
                @unlink(IMG_PATH_URL.( $records->emp_image) );
                $file = Input::file('emp_image');            
                $ext  = $file->getClientOriginalExtension();
                $mainFilename1 = rand().'.'.$ext;
                $file->move(public_path('images'), $mainFilename);
                $data->emp_image  => $mainFilename1;            
            }
        }

        if($request->hasFile('offer_letter')){
            if (Input::file('offer_letter')->isValid()) {
                @unlink(IMG_PATH_URL.( $records->offer_letter) );
                $file = Input::file('offer_letter');            
                $ext  = $file->getClientOriginalExtension();
                $mainFilename2 = rand().'.'.$ext;
                $file->move(public_path('docs/new'), $mainFilename2);
                $data->offer_letter  => $mainFilename2;            
           }
        }

        if( $data->save() ) {
            return redirect('employee')->with('msg_success', 'Employee updated successfully!');
       }
   }
}

【讨论】:

  • 当我在 $form_data = array( 'emp_image' => '$mainFilename', ) 中传递这个 $mainFilename 时;获取未定义的主文件名
  • @JyothibabuNanipini 这样getClientOriginalExtension null 错误不会发生?
  • @JyothibabuNanipini 正如你对一个错误的评论:$form_data = array( 'emp_image' =&gt; $mainFilename ); 不要将' 包装在变量中。
  • @JyothibabuNanipini 两个文件名不相同,因此请使用不同的名称。当然,如果文件未找到则变量未定义错误。现在我将更新答案。
  • tq 解决问题..请与我保持联系。
【解决方案2】:
    public function update(Request $request, $emp_id)
    {
        $validator  = Validator::make($request->all(), [
            'emp_code'      => 'required|max:255',
            'first_name'    => 'required|max:255',
            'last_name'     => 'required|max:255',
            'emp_image'     => 'required|image|mimes:jpeg,jpg,png,PNG,JPEG,JPG|max:2048',
            'department'    => 'required|max:255',
            'designation'   => 'required|max:255',
            'joining_date'  => 'required|max:255',
            'offer_letter'  => 'required|mimes:doc,docx,pdf,DOC,DOCX,PDF|max:2048',
            'emp_email'     => 'required|email|max:255|unique:employees',
            'mobile_number' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:10',
        ]);

        $emp_img = $request->file('emp_image');

        $employee = rand() . '.' . $emp_img->getClientOriginalExtension();

        $emp_img->move(public_path('images'),$employee);




        $offer_letter = $request->file('emp_image');

        $offer = rand() . '.' . $offer_letter->getClientOriginalExtension();

        $offer_letter->move(public_path('docs/new'),$offer);



        $form_data = array(
            'emp_code'      => $request->emp_code,
            'first_name'    => $request->first_name,
            'last_name'     => $request->last_name,
            'emp_image'     => $employee,
            'department'    => $request->department,
            'designation'   => $request->designation,
            'joining_date'  => $request->joining_date,
            'offer_letter'  => $offer,
            'emp_email'     => $request->emp_email,
            'mobile_number' => $request->mobile_number,
        );

        $data = Employee::findOrFail($emp_id);

        //dd($form_data);
        $data->save($form_data);

        return redirect('employee')->with('msg_success', 'Employee updated successfully!');
    }



and in view form
     you have to add 
       <form action="" method="" enctype="multipart/form-data">

I Hope It Will Help You

【讨论】:

  • 仍然同样的错误.. at $employee = rand() 。 '。' . $emp_img->getClientOriginalExtension();
  • (1/1) FatalThrowableError 在 EmployeeController->update(object(Request), '25') at call_user_func_array( Controller.php 中的数组(object(EmployeeController), 'update'), array(object(Request), 'emp_id' => '25')) (第 54 行)
  • 它们的 enctype="multipart/form-data" 在表单中很重要
  • \
  • 尝试调试每个变量..检查你错在哪里
猜你喜欢
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2020-09-12
相关资源
最近更新 更多