ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 表单字段验证器 > 说明: 设置表单字段验证器。在提交表单时,对预设验证规则的表单字段数据进行验证。在设定的验证器中可以写字段自定义的验证方法,也可对表单字段数据进行进一步处理(handleData操作)。默认表单字段验证器为 `\yunj\Validate` 方法:`fieldValidate($fieldValidate)` * 参数 **fieldValidate** (必须) * 类型一:callable 闭包 ```php fieldValidate(function(){ // 返回`\yunj\Validate`或其子类的实例对象 return new TestValidate(); // 返回`\yunj\Validate`或其子类的全限定类名 return \demo\validate\TestValidate::class; }); ``` * 类型二:string ```php // `\yunj\Validate`或其子类的全限定类名 fieldValidate(\demo\validate\TestValidate::class); ``` * 验证环境scene: * `submit`:表单提交时的验证环境 > 示例: 添加一个产品数据:`序列号(sn)`、`名称(name)`、`所属商户(mid)`... * 验证器 ```php namespace app\demo\validate\product; final class Add extends \yunj\Validate { // 自定义验证方法,校验序列号唯一性 protected function snUnique($value,$rule = "",$data){ $isExist = Db::name("product")->where("sn","=",$value)->select(); if($isExist ) return "该序列号已存在"; return true; } protected function handleData(array $rawData, $scene): array { $data = $rawData; switch ($scene) { case "submit": // 校验商户有效性,并获取商户数据添加到验证数据里 $merchant = Db::name("merchant")->where("id","=",$data["mid"])->select(); if(!$merchant ) throw_error_json("商户数据错误"); $data["merchant_data"] = $merchant; break; } return $data; } } ``` * 表单构建器: ```php $builder=YF('general_example')->field(function($tab){ $field=[ 'sn'=>['title'=>'序列号','verify'=>'require|snUnique'], 'name'=>['title'=>'名称','verify'=>'require|chsDash','desc'=>'只能输入汉字'], 'mid'=>[ 'title'=>'商户', 'type'=>'dropdown_search', 'verify'=>'require|positiveInteger', "multi"=>false, 'url'=>url('merchantOptions') ] ]; return $field; }) ->fieldValidate(\app\demo\validate\product\Add::class) ->submit(function($data){ // 获取展商数据 $merchant = $data["merchant_data"]; // 业务处理... }); ```