Yii2.0学习第19课:数据库字段映射
1、运行LNMP环境,进入Mysql,查看我们前期创建的hlong_user数据表,注意这两个信息:(1)用户名:username(2)密码:password

2、访问我们前面创建的登陆页面 web/index.php?r=login,注意页面的两个input输入框分别对应了数据库中的username和password:

3、在页面中右击选择“查看元素”,分别查看两个input中name的名称:
(1)name="HlongUser[username]"
(2)name="HlongUser[password]"
我们有理由怀疑这个“username”和“password”对应的就是数据库中的名称。


4、为了验证我们步骤3中的疑问,我们修改数据表中的username 成 username2 ,再重复步骤3,查看效果:
注意:修改视图文件。



5、打开app\models\HlongUser.php,加入如下代码:
public $field1;
public $field2;
public $_map = ['username'=>$field1,'password'=>$field2];
public function mymap($data){
foreach($data as $k=>$v){
if(array_search($k,$this->_map)){
$map[$key]=$v;
}else{
$map[$k]=$v;
}
}
$this->attributes = $map;
}

6、修改视图文件 views\login\index.php:
$form->field($model,'field1');
$form->field($model,'field2');

7、修改控制器文件controllers\LoginController.php:
我们先尝试打印一下$post,可以看到我们成功接收到了修改后的数据,接下来我们需要做的事将field1,field2分别映射到username和password并验证其合法性(参考 rules 方法)




8、继续修改LoginController.php文件:
var_dump($model->attributes());//添加修改之前的验证
$model->myapp($post);//添加修改内容
var_dump($model->attributes());//添加修改之后的验证
结果如下:

9、我尝试找到Yii2.0内置的关于字段映射的官方用法,但是一直没有找到。另外一个框架—ThinkPHP倒是有相关用法,但是也有人评价说是“鸡肋,食之无味,弃之可惜”,“仁者见仁智者见智”吧,希望有想法的朋友能相互交流经验,谢谢各位。