当前位置: 首页 > 工具软件 > BookStack > 使用案例 >

栈 php 验证格式,表单验证 - 《Biny - 高性能轻量级PHP框架》 - 书栈网 · BookStack...

郎仰岳
2023-12-01

表单验证

框架提供了一套完整的表单验证解决方案,适用于绝大多数场景。

表单验证支持所有类型的验证以及自定义方法

简单示例:namespaceapp\form;

usebiny\lib\Form;

/**

* @property \app\service\testService $testService

* 自定义一个表单验证类型类 继承Form

*/

classtestFormextendsForm

{

// 定义表单参数,类型及默认值(可不写,默认null)

protected$_rules=[

// id必须为整型, 默认10

'id'=>[self::typeInt,10],

// name必须非空(包括null, 空字符串)

'name'=>[self::typeNonEmpty],

// 自定义验证方法(valid_testCmp)

'status'=>['testCmp']

];

// 自定义验证方法

publicfunctionvalid_testCmp()

{

// 和Action一样可以调用Service和DAO作为私有方法

if($this->testService->checkStatus($this->status)){

// 验证通过

return$this->correct();

}else{

// 验证失败,参数可以通过getError方法获取

return$this->error('非法类型');

}

}

}

定义完验证类,然后就可以在Action中使用了,可以通过getForm方法加载表单// 加载testForm

$form=$this->getForm('test');

// 验证表单字段,true/false

if(!$form->check()){

// 获取错误信息

$error=$form->getError();

return$this->error('参数错误');

}

// 获取对应字段

$status=$form->status;

// 获取全部字段 返回数组类型 ['id'=>1, 'name'=>'billge', 'status'=>2]

$data=$form->values();

注意:在$_rules中未定义的字段,无法在$form中被获取到,就算不需要验证,也最好定义一下

在很多情况下,表单参数并不是都完全相同的,系统支持Form复用,即可以在通用的Form类中自定义一些内容

比如,还是上述例子的testForm,有个类似的表单,但是多了一个字段type,而且对于status的验证方式也需要变化

可以在testForm中添加一个方法// 在testForm中添加

publicfunctionaddType()

{

// 添加type字段, 默认'default', 规则为非空

$this->_rules['type']=[self::typeNonEmpty,'default'];

// 修改status的判断条件,改为valid_typeCmp()方法验证,记得要写这个方法哦

$this->_rules['status'][0]='typeCmp';

}

然后在Action中加载表单也需要添加'addType'作为参数,其他使用方法一致$form=$this->getForm('test','addType');

一个表单验证类里可以写多个附加方法,相互直接并不会有任何影响

验证类型

系统提供了7种默认验证方式,验证失败时都会记录错误信息,用户可以通过getError方法获取

self::typeInt 数字类型,包括整型浮点型,负数

self::typeBool 判断是否为true/false

self::typeArray 判断是否为数组类型

self::typeObject 判断是否为对象数据

self::typeDate 判断是否为一个合法的日期

self::typeDatetime 判断是否为一个合法的日期时间

self::typeNonEmpty 判断是否非空(包括null, 空字符串)

self::typeRequired 有该参数即可,可以为空字符串

验证类型几乎涵盖了所有情况,如果有不能满足的类型,用户可以自定义验证方法,上述例子中已有,不再过多阐述

 类似资料: