您的位置:澳门新葡萄京娱乐网站 > 编程知识 > Laravel 5.5 的自定义验证对象/类示例代码详解_ph

Laravel 5.5 的自定义验证对象/类示例代码详解_ph

2019-12-22 01:36

web 开辟进度中时时会须要进行参数验证,laravel 中大家常用 validator 只怕request 那三种方法来实行验证,可是那三种申明都不是很方便开展自定义提醒消息,自定义表达准绳,所以上边来介绍豆蔻年华种很有益于的用法:

以上代码定义了贰个 IsOddValidationRule 的自定义验证类,在 Controller 中要动用这些验证类的话,能够如此写:

Common Usage

默许富含了二种便利实用的validator,你能够使用它们来表达发送到应用的数额,也得以将她们组合使用,恐怕利用自定义的验证方式。

最分布的辨证数据的法子:

class Employee {
    var email: Valid<Email>
    var name: Valid<Name>

    init(request: Request) throws {
        name = try request.data["name"].validated()
        email = try request.data["email"].validated()
    }
}

那是三个超人的Employee模型,具有emailname个性。 通过将这多少个性格注解为Valid<>品类,来保障那几个属性只可以分包有效的数额。 Swift类型检查系统将截留任何未经过认证的多少被积累。

存储的Valid<>类其他质量,必需调用validated()主意,那样就足以经过 request.data回到的多寡开展拜谒了。

Email是Vapor中带有的validator,但是Name不是。我们来探问咋样创造validator

Valid<OnlyAlphanumeric>
Valid<Email>
Valid<Unique<T>>
Valid<Matches<T>>
Valid<In<T>>
Valid<Contains<T>>
Valid<Count<T>>

新建 TestTestValidator

使用 Laravel 5.5 新添的自定义验证类,可以越来越好地管理多量的自定义验证法则,何况在 PHPStorm 之类的 IDE 中,从求证代码里非常快跳转到对应的验证类的代码也会更有益。毕竟接收Validator::extend 的话,你一定要通过找出对验证证类名称的字符串来找到准绳定义的源代码。

Validators vs. ValidationSuites

validators能够有多少个结构,举例CountContains

let name: Valid<Count<String>> = try "Vapor".validated(by: Count.max(5))

地点是的代码用来证实二个字符串最多不抢先5个字符,但是Valid<Count>只得证实固定数值,并不能够确切的报告我们字符串的现实性尺寸。那些被认证的字符串长度大概低于3,也大概超过100万。
因此,Validator并非像程序所期待的那样安全。ValidationSuite固然用来补充那么些毛病的。将多少个ValidatorValidationSuites组合在同步,来标准的论断什么的数码要求被验证。

上述便是本文的全体内容,希望对大家的上学抱有助于,也期望大家多多点拨脚本之家。

public function handlForm{ $this->validate($request, [ 'oddField' => [new IsOddValidationRule] ]);}

Validation Failures

Vapor会在ValidationMiddleware中自行捕获验证战败的新闻。你也能够协和捕获战败音讯,或许为一定的证实退步境况自定义response

do {
    //validation here
} catch let error as ValidationErrorProtocol {
    print(error.message)
}

<b>总计:</b>Validate提供了数据印证的艺术,大家能够动用ValidationSuite开展组合已满意我们自定义的必要。
passes()tested()是分别于validated()的辨证方式,再次回到值不相同足以一本万利大家开展不相同的操作。

 ['required', 'test', 'min:1'], ); /** * Validation messages * * @var Array */ protected $messages = array( 'name.required' => '必填', 'name.min' => '最少1个字符', 'name.test' => '测试', ); /** * 自定义验证规则或者扩展Validator类 */ public function before() { $this->extend('test', function ($attribute, $value, $parameters) { return bool; }); }}

Route::post('/', ['middleware' => ['valiAdmin:Test'], 'uses' => 'IndexController@test']);

在验证的表单项为空值也许子虚乌有的时候,对应的自定义验证准则不会施行。这么些与系统自带的求证法则的逻辑是均等的。即便您愿意您的自定义验证准绳,尽管是在相应的表单项为空值时也被推行的话,那么只要把后续的接口从 rule 改成 ImplicitRule 就能够:

Custom Validator

那是三个创办ValidationSuite的例子:

class Name: ValidationSuite {
    static func validate(input value: String) throws {
        let evaluation = OnlyAlphanumeric.self
            && Count.min(5)
            && Count.max(20)

        try evaluation.validate(input: value)
    }
}

自定义Validator,只供给创设三个主意,使用此外validator只怕逻辑来兑现自定义表达的逻辑。上边我们创立了叁个Name验证器,只经过由字母和数字组成的字符串,何况字符长度为5~20。

切切实进行使能够自行布置~

Laravel 5.5 将提供叁个全新的自定义验证法规的对象,以作为原本的 Validator::extend 方法的代表。

Combining Validator

在下面的Name验证器中,大家利用&&连接了validator,相近的也得以运用||。(“且”和“或”的逻辑)
也能够动用!对验证器取反。(“非”的逻辑)

let symbols = input.validated(by: !OnlyAlphanumeric.self)
 value array * * @var array */ protected $data = array(); /** * Validation errors * * @var array */ protected $errors = array(); /** * Validation rules * * @var array */ protected $rules = array(); /** * Validation messages * * @var array */ protected $messages = array(); /** * Validation codes * * @var array */ protected $codes = array(); public function __construct { $this->data = $data; $this->before(); $this->validator = Validator::make($this->data, $this->rules, $this->messages); $this->after(); } /** * Set data to validate * * @return validator */ public function getValidator() { return $this->validator; } /** * Set data to validate * * @return $this */ public function with { $this->data = $data; $this->before(); $this->validator = $this->validator->make($this->data, $this->rules, $this->messages); $this->after(); return $this; } /** * Validation passes or fails * * @return boolean */ public function passes() { if ($this->validator->fails { $this->errors = $this->validator->messages(); return false; } return true; } /** * Return errors, if any * * @return array */ public function errors() { return $this->errors; } /** * Return errors codes, if any * * @return array */ public function getCodes() { return $this->codes; } /** * getRules * * @return array */ public function getRules() { return $this->rules; } /** * getData * * @return array */ public function getData() { return $this->data; } /** * getErrors * * @return array */ public function getErrors() { return $this->errors; } /** * getMessages * * @return array */ public function getMessages() { return $this->messages; } /** * setRule * * @param string $key * @param string $value * * @return $this */ public function setRule { $this->rules[$key] = $value; return $this; } /** * emptyRules * * @return $this */ public function emptyRules() { $this->rules = array(); return $this; } /** * sometimes * * @param string $attribute * @param string|array $rules * @param callable $callback * * @return $this */ public function sometimes($attribute, $rules, callable $callback) { $this->validator->sometimes($attribute, $rules, $callback); return $this; } /** * resolver * * @param Closure $resolver * * @return $this */ public function resolver { Validator::resolver; return $this; } /** * replacer * * @param Closure $resolver * * @return $this */ public function replacer($replace, Closure $resolver) { Validator::replacer; return $this; } /** * extendImplicit * * @param Closure $resolver * * @return $this */ public function extendImplicit($extendImplicit, Closure $resolver) { Validator::extendImplicit($extendImplicit, $resolver); return $this; } /** * extend * * @param string $rule * @param Closure|string $extension * @param string $message * * @return $this */ public function extend($rule, $extension, $message = null) { Validator::extend($rule, $extension, $message); return $this; } /** * before  * * @return $this */ public function before() { } /** * after * * @return $this */ public function after() { }}

isMethod { $type = $request->segment { $validator = $this->namespace . '\' . studly_case . '\' . studly_case . 'Validator'; $validator = new $validator; if ) { if  { return $validator->errors; } else { return redirect ->withErrors($validator->getValidator; } } } } return $next; }}
use IlluminateContractsValidationRule;class IsOddValidationRule implements Rule{ public function passes { return ; } public function message() { return ':attribute 必须是奇数'; }}

Testing Validity

validated() throw是最常用的开展认证的章程,别的还会有七个措施:

let passed = input.passes(Count.min(5))
let valid = try input.tested(Count.min(5))

passes()重临一个Bool类型,表示验证是还是不是通过。tested()意味着是不是是不是通过验证,如若未通过认证的话则会抛出拾壹分。
validated()分化的是,validated()回到的是Valid<>类型,而tested()归来的是被证实数据的原始类型。

无名函数的自定义验证准则在二回性的简要表达逻辑中用起来的确会很有益,或然是在编码进程中快捷测量检验声明逻辑也很实用。不过总来讲之,还是建议选择更具组织性和可读性的自定义验证类。最棒艺术是在编排 Controller 的进程中用佚名函数快速验证自定义准绳,然后再把它移到自定义的验证类对象中。

Vapor提供了三种差异的主意求证发送到应用的多少。让大家从最家常便饭的秘诀起头。

上述所述是小编给大家介绍的Laravel 5.5 的自定义验证指标/类示例代码详细明白,希望对大家具备助于,假设大家有别的疑问请给自家留言,笔者会及时过来我们的。在这里也非常谢谢我们对剧本之家网址的扶持!

你能够查阅该意义在 Laravel 框架的 github 上的 Pull Request ,阅读具体的落实代码以至相关的测量检验代码。

相像的意义,也得以经过无名函数来落到实处:

参考

上边是二个轻巧的示范:

Laravel 5.5 将提供三个簇新的自定义验证法则的目标,以作为原本的 Validator::extend 方法的代替。。非常多时候我们会直接用正则表明式来拍卖这种特有的证实,也一时候我们会选拔用 Validator::extend 来扩充五个自定义的家有家规。但在 Laravel 5.5 版本中,大家有了新的招式,只要定义三个达成IlluminateContractsValidationRule 接口的类就能够完结自定义的表明法规,并得以平素运用。

总结

public function handleForm{ $this->validate($request, [ 'oddField' => [function($attributes, $value, $fail) { if  { $fail; } }] ]);}
class IsOddValidationRule implements ImplicitRule{ ...}

本文由澳门新葡萄京娱乐网站发布于编程知识,转载请注明出处:Laravel 5.5 的自定义验证对象/类示例代码详解_ph

关键词: