【问题标题】:Laravel validation rule "URL" does not pass empty valueLaravel 验证规则“URL”不传递空值
【发布时间】:2017-08-12 22:30:32
【问题描述】:

我输入了带有验证规则的文本字段:

public function rules()
{
    return [
        'field' => 'url',
    ];
}

这不是必需的(字段可以为空),但验证会返回错误。

【问题讨论】:

  • 显示你得到的错误
  • 我的消息函数 'field.url' => 'error message ...' 出现错误

标签: laravel validation url


【解决方案1】:

sometimes规则添加到验证中。这意味着当值未给出或为 null 时,对 URL 进行验证。

public function rules()
{
    return [
       'field' => 'sometimes|url',
    ];
}

【讨论】:

  • 不工作......在 Laravel 文档中“仅当输入数组中存在该字段时才对该字段运行验证检查”。字段存在于数组中,但值为空。
【解决方案2】:

使用“nullable”解决问题:

public function rules()
{
    return [
        'field' => 'nullable|url',
    ];
}

【讨论】:

    【解决方案3】:

    当我们从 js 提交值时,例如通过 FormData,值 null 可以作为包含 'null' 的字符串提交,这可能会通过可空规则,导致进一步的类型检查失败。所以一定要把这个值发布为'',字面上什么都没有,没有'null'字符串

    【讨论】:

    • 能否更具体一些并显示一个代码示例来解决这种情况下的错误?
    • 这超出了服务器端验证的范围。我认为我们不应该首先向 FormData 添加空值——要么它是一个空字符串(根据用户的输入),要么该值完全不存在/省略。
    【解决方案4】:

    当您使用 formData (js) 提交请求时,默认为所有空字段分配“null”。这将通过 Laravel “可空”验证并指示为无效输入。所以,请在您的验证规则中使用类似下面的内容。

        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
            $rules = [];
            if($this->filled('field') && $this->field!= 'null'){
                $rules['field'] = 'url';
            }
            return $rules;
        }
    

    为了做到这一点,请使用 laravel 的表单请求。 https://laravel.com/docs/8.x/validation#creating-form-requests

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 2017-10-17
      • 1970-01-01
      • 2018-12-21
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2017-01-02
      相关资源
      最近更新 更多