yii2 脏属性问题

我的需求是记录修改表单时改变的内容,马上就想到了用脏属性
$model->getDirtyAttributes(),然而属性内容一样,但属性数据类型不一样的,也一并带出来了

        $model = $this->findModel($id);
        //这里$model的各属性数据类型都正常
        if ($model->load(Yii::$app->request->post())) {
        //这里load之后$model的数值型属性值被改成了字符串型

文档看了一通,要做 数据预处理 ,文档中的示例代码是这样

下面的代码示例展示了对用户输入的完整处理, 这将确保只将整数值存储在一个属性中:
['age', 'trim'],
['age', 'default', 'value' => null],
['age', 'integer', 'integerOnly' => true, 'min' => 0],
['age', 'filter', 'filter' => 'intval', 'skipOnEmpty' => true],
以上代码将对输入执行以下操作:
1.从输入值中去除前后空白。
2.确保空输入在数据库中存储为 null;我们区分 未设置 值和实际值为 0 之间的区别。 如果值不允许为 null,则可以在此处设置另一个默认值。
3.如果该值不为空,则验证该值是否为大于0的整数。大多数验证器的 $skipOnEmpty 属性都被设置为true。
4.确保该值为整数类型,例如将字符串 '42' 转换为整数 42。在这里,我们将 $skipOnEmpty 设置为 true,默认情况下,在 filter 验证器里这个属性是 false。4.确保该值为整数类型,例如将字符串 '42' 转换为整数 42。在这里,我们将 $skipOnEmpty 设置为 true,默认情况下,在 filter 验证器里这个属性是 false。

然后按照这样写了还是莫有效果噻。

阅读 3.7k
1 个回答

文档说的没错,$model->save()会顺带执行 $model->validate()

         $model = $this->findModel($id);
        //这里$model的各属性数据类型都正常
        if ($model->load(Yii::$app->request->post())) {
        //这里验证的时候要先
         $model->validate();
        //打印出来这样就没问题了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题