【问题标题】:Laravel Validator - Check if contain error key?Laravel Validator - 检查是否包含错误键?
【发布时间】:2021-10-30 13:10:40
【问题描述】:

我有一个这样的验证器,

$validator = Validator::make($request->query(),
    [
        'size'   => 'required|numeric|max:' . (100 * 1024 * 1024)
    ],
    [ 
        'size.required'   => 'param size is required',
        'size.numeric'    => 'param size should be numberic',
        'size.max'        => 'param size is over size'
    ]);

现在我想检查$validator 是否有错误size.required

$messages = $validator->errors();
if ($messages->has('size.required')) {
    // do something...
} else if ($messages->has('size.numeric')) {
    // do something...
}

那么有没有办法实现呢?

感谢您的任何想法。

【问题讨论】:

  • 你不能这样做,hassize 一起使用,而不是与size.rule 一起使用。我只能认为您可以使用get 而不是has(或first,因此如果同一字段有多个错误,则只会收到第一个错误)并尝试阅读该消息并基于此,知道rule 没有通过。你为什么要这样做?也许解决方案在其他地方。
  • @matiaslauriti 非常感谢。我正在开发一个 API Laravel APP,所以我想通过 Validator 的结果响应不同的错误代码,例如,如果规则 size.required 没有通过,它将响应 json 像 {"error":30001,"message":"xxxxx"} 和如果规则size.numeric 不通过,它会像{"error":30002,"message":"xxxxx"} 一样响应json。有没有更好的方法来做到这一点?再次感谢您。
  • 我认为你可以这样做,如果 ($validation->fails()) { $messages = $validation->errors(); if ($messages->has('size')) { if ($messages->first('size') == 'param size is required') { // 做点什么... } else if ($messages- >first('size') == 'param size should be numberic') { // 做点什么... } } return Redirect::back()->withInput()->withErrors($messages); }

标签: php laravel validation


【解决方案1】:

不是一个好的解决方案,但您可以检查错误消息是否包含关键字:

use Illuminate\Support\Str;
 
if( Str::contains($messages->first('size'), 'required')){
    // do something..
}

【讨论】:

  • 正如您所说,是的,这不是最好的实施方式,但它是一种解决方案。如果真的没有更好的方法,我会尝试一下。无论如何,非常感谢。
【解决方案2】:

我认为您正在Validation 类中寻找failed 方法

$sizeArray = [
        'required' => '', //Required Validation Will Fail
        'numeric' => 'string', //Numeric Validation will fail
        'max' => (100 * 1024 * 1024 * 10),//max validation will fail
        'success_one' => '1234',
        'success_two' => 1234
    ];

    $validator = Validator::make(
        [
            'size' => $sizeArray['numeric']
        ],
        [
            'size'   => 'required|numeric|max:' . (100 * 1024 * 1024)
        ],
        [
            'size.required'   => 'param size is required test manoj',
            'size.numeric'    => 'param size should be numberic',
            'size.max'        => 'param size is over size'
        ]
    );

    $validator->errors();//Don't Remove this line
    $failedValidation = collect($validator->failed())->map(function ($parameterFailedRules, $parameter) {
        return array_change_key_case($parameterFailedRules, CASE_LOWER);
    });

    if (Arr::has($failedValidation, 'size.required')) {
        dd('required Validation Failed');
    }else if(Arr::has($failedValidation, 'size.numeric')){
        dd('numeric Validation Failed');
    } else if (Arr::has($failedValidation, 'size.max')) {
        dd('max Validation Failed');
    }else{
        dd('All Validation Passed');
    }

请更改size的输入值以更改错误信息。

目前会显示。

“数值验证失败”

【讨论】:

    猜你喜欢
    • 2015-01-30
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2021-05-09
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多