我需要验证查询参数

问题描述 投票:0回答:1

查询参数为状态 它的值可以是 status=draft 或 status=draft,sent&

如何验证状态是草稿、已发送还是已批准?

我正在使用这个规则

'status'    => 'nullable|in:draft,approved,declined,sent'

单独验证状态。 我如何验证是否有 2 个状态并且它们都有效?

php laravel validation
1个回答
1
投票

您可以在

AppServiceProvider
中的
boot()
方法中扩展 Laravel 验证,如下所示

Validator::extend('check_status', function ($attribute, $value, $parameters, $validator) {
    $valid_statuses = ['draft', 'approved', 'declined', 'sent'];
    $requested_statuses = explode(",", $value);
    $array_diff = array_diff($requested_statuses, $valid_statuses);

    $validator->addReplacer('check_status', function ($message, $attribute, $rule, $parameters) use ($array_diff) {
         return str_replace(':statuses', implode(", ", $array_diff), $message);
    });

    return empty($array_diff);
}, 'Statuses [:statuses] are not valid');

我添加了一条自定义验证错误消息,它将打印所有无效状态。

在你的控制器中你将添加

'status' => 'nullable|check_status'
© www.soinside.com 2019 - 2024. All rights reserved.