如何从Laravel中的一条规则返回条件验证消息

时间:2019-10-27 13:47:55

标签: php laravel

我试图通过自定义验证类来验证输入并显示自定义消息。定期验证是可以的。但是我想在我的验证类中添加一个以上的条件。让我举个例子。
让我们尝试验证电话号码。我希望输入电话号码的条件是,
1.输入的最小长度必须为3
2.输入的最大长度必须为12
3.输入的内容必须为数字。
为此,请先检查我当前的代码。

在我的AppServiceProvider.php中

    use Illuminate\Support\Facades\Validator;
    use App\Validators\MyValidator;

    public function boot()
    {
        Schema::defaultStringLength(191);

        Validator::resolver(function($translator, $data, $rules, $messages) {
            return new MyValidator($translator, $data, $rules, $messages);
        });
    }

在我的MyValidator.php

    public function validatePhone($attributes, $value, $parameters){
        $phone = str_replace("-","",$value);
        if(!is_numeric($phone)){
            return false;            
        }
        if(isset($parameters[0]) && !empty($parameters[0])){
            $length = $parameters[0];
            if(strlen($phone) < $length){
                return false;
            }
        }
        if(isset($parameters[1]) && !empty($parameters[1])){
            $length = $parameters[1];
            if(strlen($phone) > $length){
                return false;
            }
        }
        return true;
    }

在我的FormController.php

    public function save(Request $request){
        $validator = Validator::make($request->all(),[
            "phone" => "phone:3,12"
        ]);
        if($validator->fails()){
            return $validator->errors();
        }
        return "Passed";
    }

如果发生验证错误,则响应如下。

{
    "phone":["validation.phone"]
}

然后,我只能为电话编写一条自定义消息。诸如“请正确输入电话号码”之类的内容。
但由于发生错误的情况,我想写三条消息以进行电话验证。例如,
1.如果长度小于3,则“请输入电话号码至少3位”。
2.如果长度大于12,则“请输入最多12位电话号码”。
3.如果电话号码包含字母,则“请仅插入电话号码”。

我该怎么办?

如果响应可以返回类似的内容,那也没关系。

{
    "phone":[
        "validation.phone.min"
    ]
}

0 个答案:

没有答案