Laravel 请求具有多个属性的验证自定义函数

Laravel Request Validation Custom Function with multiple attributes

我目前正在从事一个项目,投标人需要填写 API 凭据。我想在保存之前确保凭据没问题。

我想制定一个自定义验证规则,我在其中使用用户名和密码来调用 API,以检查凭据是否正确。我可以将验证规则添加到 api_username,但是由于受保护的 $validator->data 属性,我无法获取密码。

谁能帮我解决这个问题?

public function rules()
{
    return [
        'title' => 'required|string',
        'api_username' => 'required|string|min:32|max:32|api_cred_check',
        'api_password' => 'required|string|min:32|max:32',
    ];
}

public function withValidator($validator)
{
    $validator->addExtension('api_cred_check', function ($attribute, $value, $parameters, $validator) {
        //Use credentials to make call to API.
    });

    $validator->addReplacer('api_cred_check', function ($message, $attribute, $rule, $parameters, $validator) {
        //Message if Username and Password won't match.
    });
}

您也可以像这样使用 clouser 作为自定义验证

public function rules()
{
    return [
        'title' => 'required|string',
        'api_username' => ['required', 'string', 'min:32', 'max:32', function ($attr, $value, $fail) {
            // You can use guzzle Http here to make an API call 
        }],
        'api_password' => ['required', 'string', 'min:32', 'max:32', function ($attr, $value, $fail) {
            // You can check if Username and Password is wrong.
        }],
    ];
}

使用最后一个参数 $fail 作为函数 $fail('With your desired message if validation fails.');