thinkphp5.0修改器和数据完成关系的示例分析

  介绍

小编给大家分享一下thinkphp5.0修改器和数据完成关系的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

密码加密时遇到的问题

今天遇到密码md5加密的问题,当时使用的是“thinkphp5.0.9→模型→数据完成“实现的自动进行加密,但是在上面“thinkphp5.0.9→模型→修改器“;中发现修改器和数据完成功能一样,看下方的评论说是数据完成和修改器配合使用,我就照着做,当时这样写的: //模型层      {class  User  extends 模型//美元汽车包含新增插入和美元更新操作更新,美元就是不管新增还是更新我就自动执行   ,,,protected  auto 美元;=,(& # 39;密码# 39;& # 39;创建# 39;];   ,,,public  function  setPasswordAttr(美元值)   ,,,{   ,,,,,,,return  md5(美元值);   ,,,}   ,,,public  function  setCreateAttr ()   ,,,{   ,,,,,,,return 时间();   ,,,}   ,,,,//注册用户   ,,,public  function 注册(元数据){   ,,,,,,,,,,,bool 美元;=,$ this→保存(元数据);   ,,,,,,,,,,,return  bool 美元;?,这→美元id :, 0;   ,,,},   }//控制器层方法   public  function 注册()   ,,,{   ,,,,,,,如果(请求()→isAjax ()) {   ,,,,,,,,,,,userModel=new 美元指数\ app \ \ \用户模型();   ,,,,,,,,,,,$ data=https://www.yisu.com/zixun/input ('。');//注册   res=userModel美元->注册(元数据);   echo $ res;   其他}{   $ this ->错误(“非法访问');   }   }

 thinkphp5.0修改器和数据完成关系的示例分析

我输入“wwwwww"按照上面的代码进行注册后密码加密结果是b8d3c8f4db0c248ac242dd6e098bbf85

正确的加密结果是d785c99d298a4e9e6e13fe99e602ef42,这个时候你可能没发现,当你登陆的时候就是登陆不上去,你肯定再去注册一个新用户,比如密码还是wwwwww,你登陆的时候还是登陆不上去,只能怀疑加密出错,再往上找到了“数据完成的setPasswordAttr ()“

单独拿出来测试

直接说答案吧,我当时看了多遍修改器和数据完成测试两个小时终于知道原因了,新建的测试表

 thinkphp5.0修改器和数据完成关系的示例分析

//新建测试模型层   namespace 应用\ \指数模型;   use 认为\模式;   class  Test  extends 模型   {   ,,,protected  auto 美元;=,(& # 39;密码# 39;);   ,,,protected  function  setPasswordAttr(美元值)   ,,,{   ,,,,,,,转储(md5 (NULL));   ,,,,,,,转储(美元值);   ,,,,,,,转储(md5(美元值));   ,,,,,,,return  md5(美元值);      ,,,}   ,,,public  function  addPass () {   ,,,,,,,echo “修改器“;   ,,,,,,,这个→美元密码=& # 39;wwwwww& # 39;;   ,,,,,,,转储($ this→密码);   ,,,,,,,   ,,,,,,,echo “数据完成“;   ,,,,,,,这个美元→保存([   ,,,,,,,,,,,& # 39;用户名# 39;,,=祝辞,& # 39;thinkphp& # 39;   ,,,,,,,,,,,& # 39;密码# 39;,,=祝辞,& # 39;wwwwww& # 39;   ,,,,,,,,,,,& # 39;创建# 39;,,,,=祝辞,& # 39;123456 & # 39;   ,,,,,,,);   ,,,}   }//控制器中添加测试方法   ,public  function 测试(){   ,,,,,,,user 美元;=,模型(& # 39;测试# 39;);   ,,,,,,,//调用模型层函数   ,,,,,,,$ user→addPass ();   ,,,}

单独测试修改器

首先注释掉模型层中的“数据完成“部分 namespace 应用\ \指数模型;   use 认为\模式;   class  Test  extends 模型   {   ,,,protected  auto 美元;=,(& # 39;密码# 39;);   ,,,protected  function  setPasswordAttr(美元值)   ,,,{   ,,,,,,,转储(md5 (NULL));//把零加密   ,,,,,,,转储(美元值),,,,//查看调用时传递过来的值   ,,,,,,,转储(md5(值)美元);//把该值加密   ,,,,,,,return  md5(美元值);//把该值加密返回      ,,,}   ,,,public  function  addPass () {   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

thinkphp5.0修改器和数据完成关系的示例分析