您好,针对你提出的疑问,我细看了一下,也开始怀疑我当初为什么这样做。
后面慢慢细究出来当时的想法
if (isset($_POST['FormName'])) {
$model->attributes = $_POST['FormName'];
if ($model->validate()) {
if ($model->save()) {
// handle success
}
}
}
也就是通过$model->attributes来赋值,然后,进行验证
但这种方式,需要数据库所有的字段都写到rules()函数里面,否则无法通过$model->attributes = $_POST['FormName'];这种方式来赋值,只能单个属性赋值,进而,fecshop使用了
$model = Yii::$service->helper->ar->save($model, $one);这种方式进行遍历赋值,另外针对多维数据加入了serialize处理
,当时也是没有绕出来这个固圈,导致当时对其进行了整体抛弃,现在又回去看了一下源码,
这种规则验证还是可以继续用起来的
// 规则验证
if ($model->validate()) {
}
仅仅进行规则验证,其他的保存方式,还是使用$model = Yii::$service->helper->ar->save($model, $one);,因为有的表的字段非常的多,不可能都写到rules里面,如果写到rules里面,那么新加一个字段,都需要写到models的rules里面,会费劲很多,另外,可能多种保存方式做多种rules,就和fecshop中的customer,登录,注册都需要单独写一个model rules,会搞的很重。
因此,将$model->validate()引入进来,models层的rules,只做数据层的验证,保证后端的数据安全,对于form表单的验证,由前面的block完成。不过form表单的很多数据和model层的数据是叠加的。
总结:将$model->validate()引入进来,做model的rules规则验证,保证最终的数据格式安全。
感谢你的问题提出,后面着重优化一下这块。