Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-Ajax项目(getClientOriginalName为空)_Php_Jquery_Ajax_Laravel_File - Fatal编程技术网

Php Laravel-Ajax项目(getClientOriginalName为空)

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) {

所以我有一个Laravel项目,我使用Ajax来处理CRUD。 这是我的
控制器

/**
     * 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.']);
    }
以及表单的一部分,其中是my
blade
中的
文件输入

<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>&nbsp;&nbsp;&nbsp;' + data.success + '</strong><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</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()])