【问题标题】:Laravel: Check file exists from a form validation request?Laravel:从表单验证请求中检查文件是否存在?
【发布时间】:2022-01-11 11:14:03
【问题描述】:

如何检查是否应在表单验证请求中上传文件?
这是我目前所拥有的:

class UpdateRequest extends FormRequest
{

    public function authorize()
    {
        return true;
    }

     public function rules()
     {
         $rules = [
             'title' => 'required',
             'content' => 'required',
         ];

         if ($this->request->hasFile('image') && $this->request->file('image')->isValid()) {
             $rules['image'] = 'image|mimes:jpg,png,jpeg,gif,svg|max:2048|dimensions:min_width=100,min_height=100,max_width=1000,max_height=1000';
         }
 
         return $rules;
     }
}

但我收到此错误:

调用未定义的方法 Symfony\Component\HttpFoundation\InputBag::hasFile()

我能做什么?

【问题讨论】:

  • 我认为图像是可选的,即用户可以上传但不是必需的?

标签: laravel


【解决方案1】:

您收到此错误的原因是您尝试在基础 request 属性上调用 hasFile。由于 FormRequest 扩展了普通的 Laravel Request 类,你可以简单地调用 $this->hasFile()$this->file()

if ($this->hasFile('image') && $this->file('image')->isValid()) {
    $rules['image'] = 'image|mimes:jpg,png,jpeg,gif,svg|max:2048|dimensions:min_width=100,min_height=100,max_width=1000,max_height=1000';
}

话虽如此,如果图像是可选的,则将nullable 添加到验证规则会更有意义,因为image 将检查它是否是有效文件:

public function rules()
{
    return [
        'title'   => 'required',
        'content' => 'required',
        'images'  => [
            'nullable',
            'image',
            'mimes:jpg,png,jpeg,gif,svg',
            'max:2048',
            'dimensions:min_width=100,min_height=100,max_width=1000,max_height=1000',
        ],
    ];
}

【讨论】:

  • 你是对的,第二个选项是最好的。
【解决方案2】:

你可以使用request()帮助类来获取请求

你的代码应该是这样的

class UpdateRequest extends FormRequest
{

    public function authorize()
    {
        return true;
    }

     public function rules()
     {
         $rules = [
             'title' => 'required',
             'content' => 'required',
         ];

         if (request()->hasFile('image') && request()->file('image')->isValid()) {
             $rules['image'] = 'image|mimes:jpg,png,jpeg,gif,svg|max:2048|dimensions:min_width=100,min_height=100,max_width=1000,max_height=1000';
         }
 
         return $rules;
     }
}

这里$this 指的是Symfony\Component\HttpFoundation\InputBag 这个没有hasFile() 函数的类,这就是你得到那个错误的原因

【讨论】:

    【解决方案3】:

    您可以使用nullable 验证规则。所以只有当值不为空时才会应用所有验证

     public function rules()
         {
             $rules['title'] = ['required'];
             $rules['content'] = ['required'];
             $rules['image'] = ['nullable', 'image','mimes:jpg,png,jpeg,gif,svg','max:2048','dimensions:min_width=100,min_height=100,max_width=1000,max_height=1000'];
             return $rules;
         }
    

    【讨论】:

      猜你喜欢
      • 2020-06-13
      • 2023-02-02
      • 2018-06-15
      • 2016-09-02
      • 2016-05-23
      • 2016-03-11
      • 2015-06-09
      • 1970-01-01
      相关资源
      最近更新 更多