Laravel 8 — Вызов функции-члена getRealPath() при нуле

#php #ajax #laravel #attachment #sweetalert

Вопрос:

Когда я ввожу данные, вложенные данные не заполняются

Я использую Laravel для отправки почты с вложением, это работает, но после того, как я добавлю ajax sweet alert, невозможно прикрепить файл из входных данных, он просто игнорирует его и пишет Call to a member function getRealPath() on null

Это отправленный контроллер

 public function send(Request $request)  {   $data = [  'name' =gt; $request-gt;name,  'position' =gt; $request-gt;position,  'phone' =gt; $request-gt;phone,  'social' =gt; $request-gt;social,  'description' =gt; $request-gt;description,  'file' =gt; $request-gt;file('file')  ];   $to = 'nusamznaew@yandex.kz';   Mail::to($to)-gt;send(new SendMail($data));   return redirect('/');  }  

Это функция почтовой рассылки:

 public function build()  {   $name = $this-gt;data['name'];  $position = $this-gt;data['position'];  $phone = $this-gt;data['phone'];  $social = $this-gt;data['social'];  $description = $this-gt;data['description'];   return $this-gt;subject('Subject Email')  -gt;view('mail.mail', compact('name', 'position', 'phone', 'social', 'description'))  -gt;attach($this-gt;data['file']-gt;getRealPath(), [  'as' =gt; $this-gt;data['file']-gt;getClientOriginalName()  ]);  }  

Это работало, пока я не добавил ajax SweetAlert

 $(document).ready(function () {   $(".ajax-form").submit(function (e) {  e.preventDefault();  /*Ajax Request Header setup*/  $.ajaxSetup({  headers: {  'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')  }  });    $.ajax({  method: 'POST',  url: '{{route("vacancy.send")}}',  data: $(this).serialize(),  success: function (response) {  swal({  title: "Спасибо ваша заявка принята!",  icon: "success",  text: "Скоро наш менеджер с Вами свяжется",  showCancelButton: true,  confirmButtonColor: "#fff",  })  }  });   });   });  

Комментарии:

1. it works, but after I add ajax sweet alert, it is not какие-нибудь ошибки в консоли? какая-нибудь информация об отладке PHP?

Ответ №1:

Проблема в том, что вы отправляете данные с помощью ajax, но в контроллере вы повторно перенаправляете

если изменить на это

 return redirect('/');  

к этому

 return response()-gt;json(["status" =gt; "success"]);  

и jquery делают вот так

 $(document).ready(function () {   $(".ajax-form").submit(function (e) {  e.preventDefault();  /*Ajax Request Header setup*/  $.ajaxSetup({  headers: {  'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')  }  });   $.ajax({  method: 'POST',  url: '{{route("vacancy.send")}}',  data: $(this).serialize(),  success: function (response) {  if(response.status === "success"){  swal({  title: "Спасибо ваша заявка принята!",  icon: "success",  text: "Скоро наш менеджер с Вами свяжется",  showCancelButton: true,  confirmButtonColor: "#fff",  })  }  }  });   });  });  

я надеюсь, что это сработает.