【问题标题】:Call to a member function move() on null when updating in laravel 8在 laravel 8 中更新时在 null 上调用成员函数 move()
【发布时间】:2022-10-16 18:34:31
【问题描述】:

我正在编写一个为我的应用程序上传个人资料图片的代码。如果我更新图像,则没有错误,但是如果我更新表单,则在执行它时会出现以下错误(在 null 上调用成员函数 move())。谁能建议我哪里出错了?我正在使用 AJAX 进行更新。

在 $upload = $file->move(public_path($path), $new_name); 处调用成员函数 move()

控制器

function updatePicture(Request $request)
{
    $path = 'images/usersprofilepic/';
    $file = $request->file('user_image');
    $new_name = 'UIMG_'.date('Ymd').uniqid().'.jpg';

    //Upload new image
    $upload = $file->move(public_path($path), $new_name);

    if (!$upload) {
        return response()->json(['status' => 0, 'msg' => 
            'Something went wrong, upload new picture failed.']);
    } else {
        // Get Old picture
        $oldPicture = User::find(Auth::user()->id)->getAttributes()['picture'];

        if ($oldPicture != '') {
            if (File::exists(public_path($path.$oldPicture))) {
                File::delete(public_path($path.$oldPicture));
            }
        }

        // Update DB
        $update = User::find(Auth::user()->id)->update(['picture' => $new_name]);

        if (!$upload) {
            return response()->json(['status' => 0, 
                'msg' => 'Something went wrong, updating picture in db failed.']);
        } else {
            return response()->json(['status' => 1, 
                'msg' => 'Your profile picture has been updated successfully']);
        }
    }
}

刀锋形态


            <!-- Profile Image -->
            <div class="card card-primary card-outline ">
              <div class="card-body box-profile">
                <div class="text-center">
                  <img class="profile-user-img img-fluid " src="{{Auth::user()->picture}}" alt="User profile picture">
                </div>
                <input type="file" name="user_image" id="user_image" style="opacity: 0;height:1px;display:none">
           <a href="javascript:void(0)" class="btn btn-primary btn-block" id="change_picture_btn"><b>Change Picture</b></a>
              </div>
              <!-- /.card-body -->
            </div>
          </div>


        <div class="dealer_info">
          <h5>{{Auth::user()->name}}</h5>
          <p>{{Auth::user()->address}}<br>
             {{Auth::user()->city}}&nbsp;{{Auth::user()->country}}</p>
        </div>
      </div>

    </div>
    <div class="row">

      <div class="col-md-6 col-sm-8">
        <div class="profile_wrap">
          <h5 class="uppercase underline">Profile Settings</h5>
          <?php if($errors->any()){?><div class="errorWrap"><strong>ERROR</strong>:{{ $errors }}</div><?php }
          else if(session()->get('success') ){?><div class="succWrap"><strong>SUCCESS</strong>:{{ session()->get('success') }}</div><?php }?>
          <form  method="post" action="profile" id="Profileform" enctype="multipart/form-data">
              @csrf
           <div class="form-group">
              <label class="control-label">Reg Date -</label>
              {{Auth::user()->RegDate}}
            </div>
            <div class="form-group">
              <label class="control-label">Last Update at  -</label>
              {{Auth::user()->updated_at}}
            </div>
            <div class="form-group">
              <label class="control-label">Full Name</label>
              <input class="form-control white_bg" name="name" value="{{Auth::user()->name}}" id="name" type="text"  required>
            </div>
            <div class="form-group">
              <label class="control-label">Email Address</label>
              <input class="form-control white_bg" value="{{Auth::user()->email}}" name="email" id="email" type="email" required readonly>
            </div>
            <div class="form-group">
              <label class="control-label">Phone Number</label>
              <input class="form-control white_bg" name="phone" value="{{Auth::user()->phone}}" id="phone" type="text" required>
            </div>
            <div class="form-group">
              <label class="control-label">Date of Birth&nbsp;(dd/mm/yyyy)</label>
              <input class="form-control white_bg" value="{{Auth::user()->Dob}}" name="Dob" placeholder="dd/mm/yyyy" id="Dob" type="text" required >
            </div>
            <div class="form-group">
              <label class="control-label">Your Address</label>
              <textarea class="form-control white_bg" name="address" rows="4"   id="address" required>{{Auth::user()->address}}</textarea>
            </div>
            <div class="form-group">
              <label class="control-label">Country</label>
              <input class="form-control white_bg"  name="country" value="{{Auth::user()->country}}" id="country" type="text" required>
            </div>
            <div class="form-group">
              <label class="control-label">City</label>
              <input class="form-control white_bg"  name="city" value="{{Auth::user()->city}}" id="city" type="text" required>
            </div>
            <div class="form-group">
              <button type="submit" name="updateprofile" class="btn">Save Changes <span class="angle_arrow"><i class="fa fa-angle-right" aria-hidden="true"></i></span></button>
            </div>
          </form>
        </div>
      </div>

AJAX

<script>

    $.ajaxSetup({
       headers:{
         'X-CSRF-TOKEN':$('meta[name="csrf-token"]').attr('content')
       }
    });

    $(function(){

      /* UPDATE USER PERSONAL INFO */
      $(document).on('click','#change_picture_btn', function(){
        $('#user_image').click();
      });


      $('#user_image').ijaboCropTool({
            preview : '.user_picture',
            setRatio:1,
            allowedExtensions: ['jpg', 'jpeg','png'],
            buttonsText:['CROP','QUIT'],
            buttonsColor:['#30bf7d','#ee5155', -15],
            processUrl:'{{ route("user.profilepic") }}',
            // withCSRF:['_token','{{ csrf_token() }}'],
            onSuccess:function(message, element, status){
               alert(message);
            },
            onError:function(message, element, status){
              alert(message);
            }
         });


    });

  </script>

【问题讨论】:

  • 在执行进一步操作之前,最好使用$request-&gt;hasFile('user_image') 检查请求是否具有该文件。
  • @harishdurga 谢谢我必须使用$request-&gt;hasFile('user_image')我已经尝试过使用它,但是上传时出现错误,您能否告诉我该功能的外观。
  • 您面临的错误是什么?这个错误是因为使用$request-&gt;hasFile('user_image')吗?
  • @harish 正如您在控制器中看到的那样,$file 持有获取user_image 的请求,$upload 获取请求并将其移动到路径,因此当我使用hasFile 时,@ 出现错误987654331@ 那么,如果我使用 if 状态 if($request-&gt;hasFile('user_image')){.............} 我得到一个空白视图页面,我该如何修改函数以免出现错误。
  • 无论如何,从您的角度来看,请求中必须存在文件。所以你可以写if(!$request-&gt;hasFile('user_image')){return response()-&gt;json(['status' =&gt; 0, 'msg' =&gt; 'Something went wrong, file is missing.']);}。您可以将它放在$upload 变量声明之前。

标签: php ajax laravel-8


【解决方案1】:

准备好您的输入 包括以下这些:

CSS

<link rel="stylesheet" href="{{ asset('ijaboCropTool-master/ijaboCropTool.min.css') }}">

JS

<script src="{{ asset('ijaboCropTool-master/ijaboCropTool.min.js') }}"></script>

$('#_userAvatarFile').ijaboCropTool({
    preview : '.image-previewer',
    setRatio:1,
    allowedExtensions: ['jpg', 'jpeg','png', 'webp'],
    buttonsText:['DONE','QUIT'],
    buttonsColor:['#30bf7d','#ee5155', -15],
    processUrl:'{{ route('client.cropper') }}',
    withCSRF:['_token','{{ csrf_token() }}'],
    onSuccess:function(message, element, status){
        alert(message)
    },
    onError:function(message, element, status){
        alert(message)
    }
});

在服务器端 导入所有类

public function crop(Request $request) {
    $dest = 'asset/image/profiles/'; //full path to folder
    $file = $request->file('_userAvatarFile'); //request name of input
    $new_image_name = time().'.jpg'; //create custom name for file

    //Upload File
    $move = $file->move(public_path($dest), $new_image_name); //move file to the destination you have inputted

    if (!$move) {//if it file is not moved
        return response()->json(['status'=>0, 'msg'=>'Something went wrong']);// return error response
    }else{
        //Update users table and unlink if file exists before
        $User = User::where('id', Auth::user()->id)->first();
        $picture = $User->profile_photo_path; //assign the previous file name to a variable
        if ($picture != "") { //if the variable is not empty i.e we have something to unlink
            if (file_exists(''.$dest.$picture.'')) {//check if image exists
                unlink($dest.$picture);//unlink image using full path
            }
        }
        //Update your user profile image to the new name you assigned to the file
        $User->profile_photo_path = $new_image_name;
        $User->save(); //save to database
        return response()->json(['status'=>1, 'msg'=>'Your Profile Photo Has Been Updated Successfully']);//return success response
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-22
    • 2020-06-05
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2021-11-25
    • 2021-09-24
    • 2021-03-20
    相关资源
    最近更新 更多