gpt4 book ai didi

validation - Laravel 验证可为空或数字

转载 作者:行者123 更新时间:2023-12-04 12:25:20 26 4
gpt4 key购买 nike

我正在使用 Laravel 5.4。

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

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

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

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

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

    为了解决这个问题,我在我的 Controller 中做了这个:
    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 ????;
    });

    谢谢

    最佳答案

    尝试使用 required_if如下

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

    这将仅在 travel_km 存在且非空时验证 travel_rate。这里会,
    让你把 travel_km空值
    travel_km不为空且 travel_rate为空时会显示错误,但不会在 travel_km 时显示错误具有空值。
    希望这可以帮助。

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

    它可以通过应用如下条件规则来完成,
    if( !empty(Input::get('travel_km')) ){
    $rules['travel_km'] = 'numeric';
    }

    关于validation - Laravel 验证可为空或数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57409108/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com