【问题标题】:laravel - validation with custom valuelaravel - 使用自定义值进行验证
【发布时间】:2020-03-26 15:21:03
【问题描述】:

我的表单有一个文本框和 3 个单选按钮。 单选按钮指示用户想要使用的工具类型,但他需要将它们放在他的库存中。有 3 种类型的工具,每个单选按钮只有在他至少拥有其中一种时才能被选中。我想验证它是否真的拥有一个。在下面的示例中,变量$tool1 - 3包含用户拥有的每个工具的数量。 (例如:$tool1 = 1, $tool2 = 3, $tool3 = 0)在这种情况下,如果用户选择了前两个单选按钮之一,因为他拥有所需的工具,则验证应该是好的,但如果他选择第三个单选按钮则应该失败。

“工具”字段包含实际选择的工具,因此工具可以是工具1、工具2或工具3。

$tool1;
$tool2;
$tool3;

$data = request()->validate([
        'name'=> 'required',
        'tool' => 'required',
    ]);

如何做到这一点?

【问题讨论】:

    标签: laravel forms validation


    【解决方案1】:

    您可以使用以下数据结构做一些很好的技巧,并且在我了解您的领域时应该可以获得。

    $tools = collect(['tool1' => $tool1, 'tool2' => $tool2, 'tool3' => $tool3]);
    

    查找计数大于 0 的所有工具,filter() 删除所有空值,因为 0 == null。要验证输入,我们只需要名称,我们可以通过 keys() 获得。

    // Should return 'tool1' and 'tool2' in an array from your example
    $toolsOwned = $toolsOwned->filter()->keys();
    

    现在我们可以使用In() 验证来检查输入是否正确。

    use Illuminate\Validation\Rules\In;
    
    ...
    
    'tool' => ['required', new In($toolsOwned->all())],
    

    【讨论】:

    • 非常感谢!还有没有办法指定显示的错误代码?
    • 当一个字段验证失败时,通常会显示一个错误,一些文本..(对不起不是代码,我的错)我想告诉他们不拥有这个工具......
    猜你喜欢
    • 2019-01-29
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多