【问题标题】:Laravel Validation nullable or numericLaravel 验证可为空或数字
【发布时间】:2019-12-15 23:00:59
【问题描述】:

我正在使用 Laravel 5.4。

我在一个表单中有两个字段: travel_km 和 travel_rate

  1. 两个字段都必须是数字
  2. 这两个字段都是可选的,但如果 travel_km 不为空,则必须输入 travel_rate

我的规则: 'travel_km' => '数字|可为空', 'travel_rate' => '有时|required_with:travel_km'

问题是如果 travel_km 为空,我仍然会在 travel_rate 上收到错误,因为它为空。

如果我将 travel_rate 设置为 nullable,即使 travel_km 不为空,我也不会收到错误消息。

为了解决这个问题,我在我的控制器中做了这个:

if(empty($request->travel_km) && empty($request->travel_rate)) {
        $this->validate($request,
        [
            'customer_id' => 'required',
            'service_date' => 'required',
            'labour_hrs'    => 'numeric|nullable',
            'hourly_rate' => 'sometimes|required_with:labour_hrs',
        ],
        [
            'customer_id' => 'Please enter the customer',
            'service_date' => 'Please select the service date',
            'labour_hrs' => 'Please enter a valid number',
            'hourly_rate' => 'Please enter a valid number',
        ]);
       } else {
        $this->validate($request,
        [
            'customer_id' => 'required',
            'service_date' => 'required',
            'labour_hrs'    => 'numeric|nullable',
            'hourly_rate' => 'sometimes|required_with:labour_hrs',
            'travel_km' => 'numeric|nullable',
            'travel_rate' => 'sometimes|required_with:travel_km'
        ],
        [
            'customer_id' => 'Please enter the customer',
            'service_date' => 'Please select the service date',
            'labour_hrs' => 'Please enter a valid number',
            'hourly_rate' => 'Please enter a valid number',
            'travel_rate' => 'Please enter a valid number',
            'travel_km' => 'Please enter a valid number'
        ]);
    }

还有其他方法可以解决这个问题吗?如果有少数情况,我会遇到这个问题,我不想更通用的解决方案。

我查看了自定义验证,但不明白如何检查 travel_km 是否为空。

Validator::extend('foo', function ($attribute, $value, $parameters, $validator) {
        return is_numeric($value) && $parameter ????;
    });

谢谢

【问题讨论】:

    标签: validation laravel-5


    【解决方案1】:

    尝试使用required_if,如下所示

    'travel_km' => 'numeric|nullable', 
    'travel_rate' => 'sometimes|required_if:travel_km'
    

    仅当 travel_km 存在且非空时才会验证 travel_rate。这里会, 允许你把travel_kmnull 当travel_km 不为空且travel_rate 为空时,它会显示错误,但当travel_km 具有空值时不会显示错误。 希望这会有所帮助。

    更新:nullable 验证不适用于数值。

    可以通过以下条件规则来完成,

    if( !empty(Input::get('travel_km')) ){
      $rules['travel_km'] = 'numeric';
    }
    

    【讨论】:

    • 谢谢,但它给出了相同的结果,即使 travel_km 为空仍然会出错:'travel_rate' => 'sometimes|numeric|required_if:travle_km, true'
    • 我想补充一点,我确实谷歌了它,似乎数字规则不能为 null,因为 null 不是数字,这就是问题所在。这就是我需要自定义验证的原因
    • @SigalZahavi 是的。我也更新了答案
    • 太棒了。继续编码!
    猜你喜欢
    • 2020-08-22
    • 2018-12-09
    • 2020-10-23
    • 2021-09-22
    • 2019-01-07
    • 2019-04-10
    • 2014-04-29
    • 2017-10-17
    • 1970-01-01
    相关资源
    最近更新 更多