表单验证
框架提供了一套完整的表单验证解决方案,适用于绝大多数场景。
表单验证支持所有类型的验证以及自定义方法
简单示例:
namespace app\form;use biny\lib\Form;/** * @property \app\service\testService $testService * 自定义一个表单验证类型类 继承Form */ class testFormextends Form- {
// 定义表单参数,类型及默认值(可不写,默认null) protected $_rules = [// id必须为整型, 默认10 'id' =>[self ::typeInt , 10],// name必须非空(包括null, 空字符串) 'name' =>[self ::typeNonEmpty ],// 自定义验证方法(valid_testCmp) 'status' =>['testCmp' ]- ];
// 自定义验证方法 public function valid_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中添加 public function addType ()- {
// 添加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
有该参数即可,可以为空字符串
验证类型几乎涵盖了所有情况,如果有不能满足的类型,用户可以自定义验证方法,上述例子中已有,不再过多阐述