Validation Laravel验证可为空或数字

Validation Laravel验证可为空或数字,validation,laravel-5,Validation,Laravel 5,我使用的是Laravel 5.4 我在表单中有两个字段: 行程公里和行程率 两个字段都必须是数字 这两个字段都是可选的,但如果行程公里数不为空,则必须输入行程率 我的规则: “行驶公里数”=>“数值可为空”, “行程率”=>“有时需要:行程公里” 问题是如果行程公里为空,我仍然会得到一个关于行程率的错误,因为它为空 如果我在行程率上加上nullable,即使行程公里不是空的,我也不会得到错误 为了解决这个问题,我在控制器中执行了以下操作: if(empty($request->travel

我使用的是Laravel 5.4

我在表单中有两个字段: 行程公里和行程率

  • 两个字段都必须是数字
  • 这两个字段都是可选的,但如果行程公里数不为空,则必须输入行程率
  • 我的规则: “行驶公里数”=>“数值可为空”, “行程率”=>“有时需要:行程公里”

    问题是如果行程公里为空,我仍然会得到一个关于行程率的错误,因为它为空

    如果我在行程率上加上nullable,即使行程公里不是空的,我也不会得到错误

    为了解决这个问题,我在控制器中执行了以下操作:

    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'
            ]);
        }
    
    还有别的办法解决这个问题吗?我有这个问题,如果少数情况下,我不想更通用的解决方案

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

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

    谢谢

    如果如下所示,请尝试使用
    必需\u

    'travel_km' => 'numeric|nullable', 
    'travel_rate' => 'sometimes|required_if:travel_km'
    
    这将仅在存在行程公里且非空时验证行程率。在这里, 允许您将
    行驶公里数设置为空
    当
    travel\u km
    不为空且
    travel\u rate
    为空时,它将显示错误,但当
    travel\u km
    为空值时,不会显示错误。 希望这有帮助

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

    它可以通过应用以下条件规则来实现

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

    谢谢,但它给出了相同的结果,即使travel_km为空,仍然会得到一个错误:“travel_rate”=>“有时是数字的,如果:travle_km,true”我想补充一点,我用谷歌搜索了它,数字规则似乎不能为空,因为空不是数字,这就是问题所在。这就是我需要定制的原因validation@SigalZahavi对。我也更新了我的答案。继续编码!