Thinkphp5把模型的验证规则归为一个验证器,这种做法,不知到符不符合大家的心意,反正楼主是比较不爽的

楼主更倾向于tp3.2的验证规则直接写在模型里面,毕竟你的验证规则一般而言是针对模型来验证的。独立出来,

个人感觉除了写多一个文件外,优点暂时没体验出来。

在写登录模块的时候,突然想到,在模型之中可以定义自动完成规则,验证器可以定义验证规则。

那么关于这两者的先后执行关系到底是怎么样?自己手动验证一下:

思路:

先在控制器里面填好数据,然后再尝试在数据库里面新增记录。通过对数据的登录帐号的信息进行不同的验证:

验证一:控制器里面不填写accounts字段,在模型里面通过自动完成规则完成accounts字段的内容填写。再在验证器的函数里面对accounts字段的内容输出。

验证二:控制器里面填写accounts字段。在模型里面通过自动完成填写accounts字段内容(与控制器不一致)

登录表的设计:

 DROP TABLE IF EXISTS `tp5_user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tp5_user` (
`id` int(16) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`username` varchar(16) NOT NULL COMMENT '用户名',
`accounts` varchar(255) NOT NULL COMMENT '登录账户',
`password` varchar(255) NOT NULL COMMENT '登录密码',
`mobile` varchar(15) DEFAULT NULL COMMENT '手机(重置密码)',
`user_type` tinyint(4) DEFAULT '' COMMENT '账户类型',
`status` tinyint(4) DEFAULT '' COMMENT '状态(0禁用,1正常)',
`create_time` datetime DEFAULT NULL COMMENT '加入时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='客户表';

模型的定义:

 namespace app\index\model;

 use think\Model;

 class User extends Model {
protected $auto = ['accounts' => 'gxk'];
}

验证器的定义:

 namespace app\index\validate;

 use think\Validate;

 //测试检验器
class User extends Validate{
protected $rule = [
'username' => 'require|max:25|check_name',
'accounts' => 'check_accounts',
//'email' => 'email',
]; protected $message = [
'username.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
//'email.check_email' => '邮箱问题',
//'email' => '邮箱格式错误',
]; /**
* 检测自定义的验证函数的参数
* 参数固定~~~
* @param $value 传入的该字段信息
* @param $rule 规则传入的参数信息
* @param $data 提交的所有参数信息
*/
protected function check_email($value, $rule, $data){
dump($value);
dump($data);
return false;
} protected function check_name($value, $rule, $data){
dump($data);
dump($value);
return true;
} protected function check_accounts($value, $rule, $data){
dump($value);
return true;
}
}

控制器:

 namespace app\index\controller;

 class User {
public function index(){
$user = new \app\index\model\User();
$data = ['username'=>'gxk', 'mobile'=>'13631789388', 'accounts' => 'aaa'];
// 调用当前模型对应的User验证器类进行数据验证
$result = $user->validate(true)->save($data);
if(false === $result){
// 验证失败 输出错误信息
dump($user->getError());
}
}
}

验证j结果:

验证一:

若控制器不填写accounts字段,在验证器定义了检查accounts数据的函数check_accounts,你会发现,这个函数并没有执行,但是数据记录已经增加了

accounts字段的值为模型的自动填充值。说明:模型的自动填充在验证器之后。而且如果在规则里面定义某字段的验证规则时,若没有定义require规则,

则该字段不在提交的数据中时,验证规则不会执行(验证函数)。

验证二:

控制器填充accounts字段,然后模型自动规则填充非一致数据,发现验证函数执行,数据库写入数据。发现数据库的改字段的值是控制器的数值。说明倘若

在控制器提交的数据包含了字段的数值,则虽然模型的自动完成字段有包含该字段的数值,但是已被覆盖。

最新文章

  1. (转)C# foreach 中获取索引index的方法
  2. a标签的href值
  3. Golang在windows下交叉编译linux程序
  4. [iOS]解决模拟器无法输入中文问题
  5. Android开发记录(转)
  6. 程序员都会的 35 个 jQuery 小技巧
  7. leetcode Container With Most Water python
  8. ARM简介(科普文)
  9. F5 root密码恢复
  10. 使用jquery.form异步提交注意jquery.validate需要手动添加验证
  11. cookies和re
  12. Exceptionless邮箱设置
  13. spark对elasticsearch增删查改
  14. idea代码提示,不区分大小写
  15. 关于PID的如何修改的FAQ
  16. CustomScrollView + slivers + SliverAppBar
  17. 学习Django,http协议,
  18. 有了art-template,如有神助
  19. spark 常用技巧总结
  20. vuex 温故而知新 mapState的使用

热门文章

  1. hud 2577 How to Type
  2. 【笔记】如何查看HTTP请求头&&【实验吧】天下武功唯快不破
  3. 三分钟浅谈TT猫的前端优化
  4. Java基础语法(上篇)
  5. ES6的变量解构赋值
  6. 全面解读JavaScript入门到进阶,100%基础知识掌握!
  7. JavaScript中的this基本问题
  8. sa账户和密码丢失如何找回
  9. win10 uwp 模拟网页输入
  10. C#枚举中使用Flags特性