Php Laravel-Ajax项目(getClientOriginalName为空)
所以我有一个Laravel项目,我使用Ajax来处理CRUD。 这是我的Php Laravel-Ajax项目(getClientOriginalName为空),php,jquery,ajax,laravel,file,Php,Jquery,Ajax,Laravel,File,所以我有一个Laravel项目,我使用Ajax来处理CRUD。 这是我的控制器: /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) {
控制器
:
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$rules = array(
'naziv' => 'required|max:90|unique:restaurants',
'adresa' => 'required|max:150',
'min_dostava' => 'required|max:5',
'vrijeme_dostave' => 'required|max:10',
'cijena_dostave' => 'required|max:5',
'podrucije_grada' => 'required',
'br_telefona' => 'required|numeric|unique:restaurants',
'kuhinja_id' => 'required',
'user_id' => 'required',
'lokacija' => 'max:999',
);
$error = Validator::make($request->all(), $rules);
if($error->fails())
{
return response()->json(['errors' => $error->errors()->all()]);
}
// logo
$logo = $request->file('logo');
$filename = $logo->getClientOriginalName();
//Fullsize
$logo->move(public_path().'/uploads/',$filename);
$image_resize = Image::make(public_path().'/uploads/'.$filename);
$image_resize->fit(800, 600);
$image_resize->save(public_path('uploads/'.$filename));
// logo finish
$restaurant = Restaurant::updateOrCreate(['id' => $request->restaurant_id],
[
'naziv' => $request->naziv,
'adresa' => $request->adresa,
'min_dostava' => $request->min_dostava,
'vrijeme_dostave' => $request->vrijeme_dostave,
'cijena_dostave' => $request->cijena_dostave,
'podrucije_grada' => $request->podrucije_grada,
'br_telefona' => $request->br_telefona,
'kuhinja_id' => $request->kuhinja_id,
'user_id' => $request->user_id,
'lokacija' => $request->lokacija,
'logo' => $filename
]);
$restaurant->save();
if($restaurant->wasChanged()){
return response()->json(['success'=>'Uspjesno ste izmijenili restoran.']);
}
return response()->json(['success'=>'Uspjesno ste dodali novi restoran.']);
}
以及表单的一部分,其中是myblade
中的文件输入
:
<div class="form-group">
<label for="exampleFormControlFile1" class="form-control-sm">Logorestorana</label>
<input type="file" class="form-control-file" id="logo" name="logo" value="">
</div>
问题
我在我的网络控制台中不断遇到同样的问题,事实就是如此
在null上调用成员函数getClientOriginalName()
我做错了什么
我还将@crsf包含在表单和enctype=“multipart/formdata”
中。
我还使用了拉威尔干涉图像
请帮助。您不能在ajax函数中传递enctype
和mimetype
。请试试这个
$.ajax({
data: $('#productForm').serialize(),
url: "{{ route('admin.restaurants.store') }}",
type: "POST",
dataType: 'json',
enctype: 'multipart/form-data',
mimeType: 'multipart/form-data',
success: function (data) {
var html = '';
if(data.errors)
{
html = '<div class="alert alert-danger">';
for(var count = 0; count < data.errors.length; count++)
{
html += '<p>' + data.errors[count] + '</p>';
}
html += '</div>';
}
if(data.success)
{
html = '<div class="alert alert-success alert-dismissible fade show" role="alert"><strong><i class="fas fa-check-circle"></i> ' + data.success + '</strong><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button></div>';
$('#productForm').trigger("reset");
$('#ajaxModel').modal('hide');
table.draw();
}
$('#form_result').html(html);
}
});
$.ajax({
数据:$('#productForm')。序列化(),
url:“{route('admin.restaurants.store')}}”,
类型:“POST”,
数据类型:“json”,
enctype:“多部分/表单数据”,
mimeType:“多部分/表单数据”,
成功:功能(数据){
var html='';
if(data.errors)
{
html='';
对于(var count=0;count';
}
html+='';
}
if(data.success)
{
html=''+data.success+'×;
$('#productForm')。触发器(“重置”);
$('#ajaxModel').modal('hide');
table.draw();
}
$('form#u result').html(html);
}
});
错误消息表示请求中没有“徽标”。
当你试图得到它的时候
$logo = $request->file('logo');
它可能是null
。然后尝试获取文件名时
$filename = $logo->getClientOriginalName();
它失败是因为$logo=null
尝试使用
dd($request->input());
查看请求中的实际内容。或者你可以用
Log::info("Request data = ", ['request' => $request->input()])
是的,问题是$logo=null
但我不知道为什么。似乎我的文件输入
没有采纳任何建议?我尝试过,但又遇到了同样的问题。我已经在我的正式建议中包含了enctype?enctype在ajax调用中传递..尝试后…就像我的答案代码一样
Log::info("Request data = ", ['request' => $request->input()])