宝哥软件园

ThinkPHP5验证器的具体使用

编辑:宝哥软件园 来源:互联网 时间:2021-08-31

前言:

我们在做API开发的时候,会接受客户端发送的参数。大家都知道这个参数不可信,我们后端开发人员必须验证这个参数。在之前的开发中,我只知道tp5的验证器,却不知道它的用途,因为之前开发中的验证往往是基于模型域的。验证器更适合API开发。今天,我将简单谈谈验证器的使用

目录:

创建一个验证器编写一个单独的验证器调用validation 1。创建验证器

首先,我们需要一个文件夹来存储我们的验证器。我们在模块下创建了一个与控制器级别相同的文件夹,名为validate

然后我们可以构建一个验证器。我们只需要创建一个类并继承tp5的validate类。

但是熟悉面向对象思想的朋友一定知道,当我们需要一个每个验证器都需要使用的方法时,我们并不会修改tp5的源代码。我们将再写一个类作为我们的基类。所有验证器都继承这个基类,然后这个基类继承tp5的validate类。

这里我们称他为基本验证

现在,创建一个严肃的验证器。例如:

命名空间应用索引验证;使用思考验证;类User扩展Validate { protected $ rule=[' name '=' require | max :25 ',' email'='email ',];}到要实例化的控制器或模型,然后调用

//一个虚拟的数据集,在实际开发中,用户传输的数据是接受的$ data=['name'=' thinkphp ',' email '='[email protected]'];$ validate=loader :3360 validate(' User ');if(!$ validate-check($ data)){ dump($ validate-getError());}编写了这种验证器的应用程序。看看有没有什么可以简化的。

首先,从客户端接收需要验证的数据。然后,第一步是接受数据,然后我们需要验证数据。如果验证失败,我们将返回一条错误消息。每次请求接口时都需要这两个部分。然后我们希望将其封装在BaseValidate中

命名空间app home validate使用think Exception使用思考请求;使用思考验证;基类validate扩展validate { public function go check($ data=' '){//实例化请求对象$ request obj=request :3360 instance();//如果传入的为空,则获取参数empty($ data)$ data=$ request obj-param();If ($this-check($data)) {//如果验证通过,返回true}else{ //如果验证失败,$ error=$ this-getError();//抛出异常抛出新的Exception($ error);}}}这个goCheck方法封装后,可能有人会问,这个验证规则在哪里?

2.编写一个单独的验证器

之前已经说过,BaseValidate是用来继承的,所以我们还没有开始编写真正的验证器。规则被制定到这个验证器中。为了更深入地理解,在这个例子中顺便使用了自定义验证规则。事实上,tp编写的验证规则应该足够了

让我们以最普遍接受的数据为例,即id是我们数据库中某一段数据的id。这个id通常被设计成一个主键,在没有符号的情况下自动递增,当翻译成中文时是一个正整数。那么如果客户发送的参数是负数或者小数,就不应该通过验证。

根据以上要求,我们将创建一个验证器。该位置仍像以前一样位于验证文件夹下

名叫IdMustBePositiveInt.php(名字有点长,但很容易理解)

首先,我们必须继承我们的基本验证器

类id mustbepositive int扩展基本验证,然后制定规则为固定成员变量赋值

Protected $rule=[//require是一个内置规则,但tp5没有positiveInteger规则,因此下面的正数int使用自定义规则“id”=“require | positiveInt”];所以如何做自定义规则其实很简单。定义受保护的方法

//系统会自动传入几个参数,第一个是需要验证的值,第二个是规则,可以指定规则的内容也可以不写,第三个是原来传入的数据。实际上,不仅这三个参数,而且文档保护函数正int ($ value,$ rule=' ',$ data){ if(is _ int($ value 0))($ value 0)0){ return true;}else{ return 'id必须是正整数';} }!注意:如果此处判断失败,则返回错误消息,而不是false。

3.呼叫验证

根据我们之前的包,我们需要实现的是接受参数并验证参数的集成。那么我们现在怎么称呼验证呢

太神奇了,让我们以id为例

Public function test($id) {//直接在controller中调用,写下这一行代码得到验证(new idmustbposition)-go check();}有了这样的代码,验证就可以直接进行了。当我们实例化id验证器时,我们调用其父类的goCheck方法。goCheck方法将接受参数,并将参数传递给validate对象上的Check方法,以匹配id验证器中$rule中指定的require规则和用户定义的规则。如果都通过,就会返回true,如果其中一个不匹配,就会抛出异常。这次以id为例,虽然看起来比直接写独立验证麻烦很多,但仔细想想,这个验证规则其实很多地方都是一样的,比如密码验证规则、用户名验证规则等。你做了很多验证。事实上,您可以在下一个项目中继续应用它

TP5身份验证规则的使用

静态调用(使用内置规则验证单个数据,返回值为布尔值)

//日期格式验证validate : date format(' 2016-03-09 ',' y-m-d ');//true//验证是否有效的日期validate :3360 is(' 2016-06-03 ',' date ');//true//验证有效的电子邮件地址validate:3360is是否为('[email protected]',' email ');//true//验证validate: in ('a ',['a ',' b ',' c'])是否在一定范围内;//true//验证是否大于某个值Validate:gt(10,8);//true//常规验证validate:3360regex (100,' d ');//true模型验证(模型中的验证方法)

$User=新用户;$ result=$ user-validate(['name '=' require | max :25 ',' email'=' email ',],[' name。要求'='名称必须',' name.max'='名称最多不能超过25个字符',' email'=。If(false===$result){ //验证未能输出错误消息转储($ User-getError());} 控制器验证(控制器中的验证)

如果需要在控制器中进行验证并继承thinkController,可以调用控制器类提供的validate方法进行验证,如下所示:

$ result=$ this-validate([' name '=' think PHP ',' email'='[emailprotected]',],[ 'name'='require|max:25 ',' email'='email ',]);如果(真的!==$result){ //如果验证失败,输出错误消息dump($ result);}控制器中的验证码可以简化为:

$result=$this-validate($data,‘User’);如果(真的!==$result){ //如果验证失败,输出错误消息dump($ result);}如果要使用场景,可以使用:

$result=$this-validate($data,' user . edit ');如果(真的!==$result){ //如果验证失败,输出错误消息dump($ result);}在validate方法中,还支持一些操作前回调,如下所示:

$result=$this-validate($data,' User.edit ',[],[$this,' some ']);如果(真的!==$result){ //如果验证失败,输出错误消息dump($ result);}好了,以上就是tp5验证器的介绍。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+