1、创建自定义验证类:
首先,在app/Validators目录下创建一个新的文件夹,用于存放自定义的验证类。在该目录下创建一个名为FormValidator.php的文件,返回验证的字段,再根据返回的字段走业务流程,这样可避免部分字段遗落验证,或者接收到恶意字段。
<?php
namespace App\Validators;
use Illuminate\Support\Facades\Validator;
class FormValidator
{
public static function validate(array $data, array $rules, array $messages = [])
{
$validator = Validator::make($data, $rules, $messages);
if ($validator->fails()) {
throw new \InvalidArgumentException($validator->errors()->first());
}
return $data;
}
}
在上面的示例中,我们创建了一个名为FormValidator的验证类。该类包含一个静态方法validate,接受要验证的数据、验证规则和可选的验证错误消息。该方法使用Laravel的Validator类进行验证,并在验证失败时抛出异常。
2、创建具体的验证器类:
接下来,在app/Validators目录下创建一个名为CustomFormValidator.php的具体验证器类,根据不同的rules进行对应参数的验证更加通用。
<?php
namespace App\Validators;
class CustomFormValidator
{
public static function validate($data = [], $rules = [])
{
//自定义规则提示语
$message = [
'username.required' => '账号名不能为空',
'username.min' => '账号太短,至少要有:3个字符',
'username.max' => '账号太长,最多不超过:50个字符',
'password.required' => '密码不能为空',
'phone.required' => '手机号码不能为空',
];
return FormValidator::validate($data, $rules, $message);
}
}
在上面的示例中,我们创建了一个名为CustomFormValidator的具体验证器类。该类定义了具体的验证规则,并使用我们之前创建的FormValidator类来进行验证。
3、使用自定义验证器类:
现在,你可以在控制器或其他需要进行表单验证的地方使用自定义验证器类,根据自定义的rules去验证对应的参数字段
public function login(Request $request)
{
$data = $request->post();
$rules = [
'username' => 'required',
'password' => 'required',
];
try {
$data = CustomFormValidator::validate($data, $rules);
// 验证通过,继续处理请求
} catch (\InvalidArgumentException $e) {
// 验证失败,处理错误
return $this->msgJson(400, $e->getMessage());
}
}
在上面的示例中,我们在myMethod方法中使用了CustomFormValidator类进行表单验证。如果验证失败,将抛出\InvalidArgumentException异常,我们可以在catch块中处理该异常并返回自定义的错误响应。如果验证通过,你可以继续处理请求。
使用自定义验证类和验证器类,你可以在多个请求中重用验证规则,并自定义验证错误消息。通过自定义错误消息,你可以更好地控制和定制验证错误的输出。这样可以提高代码的可重用性和可维护性,同时提供更友好和准确的错误信息给用户。