【问题标题】:Laravel - Get invalid elements from ValidatorLaravel - 从验证器中获取无效元素
【发布时间】:2016-12-12 01:16:18
【问题描述】:

是否可以从输入数组(或至少索引)中获取失败的元素?

例子:

$data = [
    ['name' => 'John', 'age' => 30],
    ['name' => 'Robert', 'age' => 'nope'],
    ['name' => ['woops'], 'age' => 10]
];

$validator = \Validator::make($data, [
    '*.name' => 'required|string|max:200',
    '*.age' => 'required|int'
]);

if(!$validator->passes()){

    /*
        Get all the failed elements.
        In this case: 
        [
            ['name' => 'Robert', 'age' => 'nope'],
            ['name' => ['woops'], 'age' => 10]
        ]
     */
    $fails = $validator->getFailElements();

    // OR

    /*
        Get failed indexes:
        [1,2]
     */
    $indexes = $validator->getFailIndexes();

    //Proceed...

}

原因是我想在表格中插入无效数据,因此可以稍后修复这些条目...

【问题讨论】:

    标签: php validation laravel


    【解决方案1】:

    您可以在验证器上调用invalid() 来获取失败的数据。

    $failed = $validator->invalid();
    

    参考:https://github.com/illuminate/validation/blob/master/Validator.php#L544

    【讨论】:

    • 我在这里做了一些测试。该方法返回一个空数组,即使存在错误数据。在这里使用 laravel 5.2
    • 这很奇怪。检查 Validator.php 文件,看看您是否可以试验其中的内容。
    • 我做了一些调试,来自messages()->toArray()的数组索引与$this->data不同。似乎我们发现了一个错误。我还在他们的存储库中打开了一个问题:github.com/laravel/framework/issues/14646。无论如何...我会接受您的回答,因为在使用简单向量时它似乎是正确的。谢谢
    • 公平地说,我认为他们在任何文档中都没有提到invalid()。通常,当我需要某些东西时,我做的第一件事就是深入研究框架,看看我能找到什么样的好东西——这就是我找到这个的方法。
    • @CarlosCarucce 发现这个错误真是太棒了!
    【解决方案2】:

    试试这个

    $validator = \Validator::make($data, [
        '*.name' => 'required|string|max:200',
        '*.age' => 'required|int'
    ]);
    
     if ($validator->fails()) {
        dd($request->all());
       //do your code
    }
    

    【讨论】:

    • 这将只显示所有表单数据。 OP 只想要失败的项目。
    • 不,你没有得到它。他想要 FAIL 验证的项目,而不仅仅是打印所有 WHEN 验证失败的项目。
    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2019-08-08
    • 2021-07-13
    相关资源
    最近更新 更多