yii2 脏属性问题

发布于 2022-09-12 00:07:39 字数 1058 浏览 21 评论 0

我的需求是记录修改表单时改变的内容,马上就想到了用脏属性
$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。

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

意中人 2022-09-19 00:07:39

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

         $model = $this->findModel($id);
        //这里$model的各属性数据类型都正常
        if ($model->load(Yii::$app->request->post())) {
        //这里验证的时候要先
         $model->validate();
        //打印出来这样就没问题了
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文