【问题标题】:file validations don't work properly in laravel文件验证在 laravel 中无法正常工作
【发布时间】:2021-03-07 10:00:08
【问题描述】:

我在 laravel 7 中创建了自定义验证,但文件验证无法正常工作。 我在验证中限制了大小和格式,用户遵守规则,但是当他们提交表单时,验证系统会向他们显示与文件相关的错误。

例如,文件不能大于 1 MB,用户上传小于 1 MB,但表单不提交并在验证中显示自定义消息。

同样的事情发生在 mime 和格式上

其他工作正常。

我在控制器中的验证:

 public function store(Request $request)
{
    $this->validate($request,[
       'customername'=>'required',
       'phone'=>'required',
       'producttype'=>'required',
       'width'=>'required',
       'height'=>'required',
       'model'=>'required',
       'material'=>'required',
       'count'=>'required',
        'sku'=>'required|unique:offlineorders,SKU',
        'image'=>'image|mimes:jpeg,png,jpg,svg|size:1048',
    ],[
        'customername.required'=>'لطفا نام مشتری را وارد کنید',
        'phone.required'=>'لطفا شماره تماس مشتری را وارد کنید',
        'producttype.required'=>'لطفا نوع محصول را مشخص کنید',
        'width.required'=>'لطفا طول محصول را مشخص کنید',
        'height.required'=>'لطفا عرض محصول را مشخص کنید',
        'model.required'=>'لطفا مدل محصول را تعیین کنید',
        'material.required'=>'لطفا جنس بکار برده شده در محصول را تعیین کنید',
        'count.required'=>'لطفا تعداد سفارش را مشخص کنید',
        'sku.required'=>'لطفا شناسه سفارش را مشخص کنید',
        'sku.unique'=>'سفارشی با این شناسه از قبل ثبت شده است',
        'image.image'=>'فایل اپلود شده باید  عکس باشد',
        'image.mimes'=>'لطفا از فرمت های مربوط به عکس در فایل مربوطه استفاده کنید',
        'image.size'=>'عکس مورد نظر نباید بیش تر از 1 مگ باشد '
    ]);

 if ($request['image']){

     $file = $request['image'];
     $imgname = $file->getClientOriginalName();
     $this->ImageUploader($file, '/upload/orders/');
 }else{
     $imgname=null;
 }


    if ($request->has('paymentstatus')){
        $totalprice=$request->totalprice;
        $beforeprice=$request->beforeprice;
        $debatorprice=$totalprice-$beforeprice;
    }else{
        $debatorprice=0;
    }

    offlineorder::create([

        'ProductType'=>$request->producttype,
        'OtherProduct'=>$request->otherproduct,
        'CustomerName'=>$request->customername,
        'CorporateName'=>$request->corporatename,
        'Phone'=>$request->phone,
        'Width'=>$request->width,
        'Height'=>$request->height,
        'Model'=>$request->model,
        'Material'=>$request->material,
        'Color'=>$request->color,
        'Count'=>$request->count,
        'Kalaf'=>$request->kalaf,
        'Image'=>$imgname,
        'Text'=>$request->text,
        'Description'=>$request->description,
        'TotalPrice'=>$request->totalprice,
        'BeforePrice'=>$request->beforeprice,
        'PaymentStatus'=>$request->paymentstatus,
        'DebtorPrice'=>$debatorprice,
        'SKU'=>$request->sku,

    ]);

    session()->flash('add_order','سفارش شما با موفقیت ثبت شد');
    return back();
}

【问题讨论】:

  • 试试这个'image|mimes:jpeg,png,jpg,svg|max:1048'。使用最大而不是大小
  • 是的,我先试了一下,但没用@sd077
  • 你尝试后遇到了什么错误
  • 您在表单中使用了 enctype=multipart/form-data 吗?

标签: php laravel forms validation


【解决方案1】:

根据 Laravel 8 doc 行

'image'=>'image|mimes:jpeg,png,jpg,svg|size:1048',

应该是 'image'=>'image|mimes:jpeg,png,jpg,svg|file|size:1048',

https://laravel.com/docs/8.x/validation#rule-size

可能错误的文件规则会破坏 mime 规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 2021-04-17
    • 1970-01-01
    • 2022-10-15
    • 2017-05-10
    • 2020-07-17
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多