2019-12-13 19:43:14 1359次浏览 2条回答 0 悬赏 15 金钱

我的需求是记录修改表单时改变的内容

$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。

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

最佳答案

  • 发布于 2019-12-16 11:08 举报

    load 并不会做输入验证,load 完后 $model->validate() 才会执行 你贴的 这些预处理操作

    觉得很赞
  • 回答于 2019-12-15 16:13 举报

    Yii::$app->request->post()打印出来看看
    我觉得很有可能你应该使用$model->load(Yii::$app->request->post(), '')

您需要登录后才可以回答。登录 | 立即注册
搞搞的传奇
见习主管

搞搞的传奇

注册时间:2015-02-24
最后登录:2020-06-04
在线时长:24小时46分
  • 粉丝8
  • 金钱5
  • 威望10
  • 积分345

热门问题