trylife

trylife

fmt.print("Hello World")

  • 财富值1626
  • 威望值40
  • 总积分2536

个人信息

  • 2015-06-14 已签到
    连续签到5天,获得了20个金钱
  • 赞了回答
    $query->where(['not in', 'id', [1, 2, 3]]);
    
  • 回复了 的回答

    model里的beforeSave($insert)用过么?骚年

    大师果然功力深厚,骚年马上去看。

  • 2015-06-13 已签到
    连续签到4天,获得了20个金钱
  • 回复了 的回答

    model里的beforeSave($insert)用过么?骚年

    经过实践,beforeSave 无法区分是insert还是update ,造成的结果就是重复序列化。

  • 赞了回答

    这样也可以。

    if ($model->load(Yii::$app->request->post())) {
        $model->images = serialize($model->images);
        if ($model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }
    }
    
  • 赞了回答

    重写afterValidate()方法应该可以做到

  • 回复了 的回答

    重写afterValidate()方法应该可以做到

    感谢你的回答,POST过来是数组,模型验证通过不了。

  • 赞了回答

    研究了一下,目前有了具体答案了
    Yii::$app->request->post();
    以上这一句的作用是判断是否是通过post提交,且可以给提交的name设定一个默认值,比如:
    Yii::$app->request->post('name','user_name');
    我有发现当第二个参数不设定的时候返回的就是null,没啥用途。

    真正让数据进入model层的在于 Model 下面的load()方法,载入的是提交后的值如下代码:

    $model = new Model_Name();
    if($model->load(Yii::$app->request->post())){
        echo '数据载入成功';
    }else{
        echo '非post提交,所以载入失败';
    }
    

    以上就是获取提交数据的简单粗暴的方法。到这里依然还没进入主题。

    根据楼主的需求是,要对提交的值进行再次操作,也就是在入库前做些序列化也好或者是对数据进行进一步处理的好。怎么做呢?
    从追踪代码来看,绕了好大的一个圈子,最后回到了Model层上,这个类中的某些方法完全可以完成我们的需求,请看代码:

        //我们假设提交的数据里有个image
        $model = new Model_Name();
        //这里对数据进行预处理
        if($model->load(Yii::$app->request->post())){    //数据载入成功
            //这里对数据进行处理,拿image来举例。此刻你应该记得跟post没关系了,数据都在内存中了,由model接手了
            //以下句话的意思查看方法说明即可明白
            $model->setAttribute('image',serialize($model->getAttribute('image')));
    
            //程序执行到这一步,image这个值已经不再是提交来的值,已经被更改了
            //此刻数据在存储前或者是更新数据前,该model的image已经被更改,如此就做到了我们需要的结果,不是吗
            if($model->validate()){
                $model->save();
                echo '存储成功!';
            }else{
                echo '部分数据不合法或者其他异常';
            }
            
        }else{
            echo '非post提交,所以载入失败';
        }
    

    总结:主要的核心症结在于,post过来后的数据,接下来的工作是由model层来完成的。就不要继续玩$_POST了。
    希望可以帮到你!

    如果大家觉得还有其他的比较方便的方式,还望告知!
    我是鬼鬼,鬼一浪人是也!201150612

  • 回复了 的回答

    研究了一下,目前有了具体答案了
    Yii::$app->request->post();
    以上这一句的作用是判断是否是通过post提交,且可以给提交的name设定一个默认值,比如:
    Yii::$app->request->post('name','user_name');
    我有发现当第二个参数不设定的时候返回的就是null,没啥用途。

    真正让数据进入model层的在于 Model 下面的load()方法,载入的是提交后的值如下代码:

    $model = new Model_Name();
    if($model->load(Yii::$app->request->post())){
        echo '数据载入成功';
    }else{
        echo '非post提交,所以载入失败';
    }
    

    以上就是获取提交数据的简单粗暴的方法。到这里依然还没进入主题。

    根据楼主的需求是,要对提交的值进行再次操作,也就是在入库前做些序列化也好或者是对数据进行进一步处理的好。怎么做呢?
    从追踪代码来看,绕了好大的一个圈子,最后回到了Model层上,这个类中的某些方法完全可以完成我们的需求,请看代码:

        //我们假设提交的数据里有个image
        $model = new Model_Name();
        //这里对数据进行预处理
        if($model->load(Yii::$app->request->post())){    //数据载入成功
            //这里对数据进行处理,拿image来举例。此刻你应该记得跟post没关系了,数据都在内存中了,由model接手了
            //以下句话的意思查看方法说明即可明白
            $model->setAttribute('image',serialize($model->getAttribute('image')));
    
            //程序执行到这一步,image这个值已经不再是提交来的值,已经被更改了
            //此刻数据在存储前或者是更新数据前,该model的image已经被更改,如此就做到了我们需要的结果,不是吗
            if($model->validate()){
                $model->save();
                echo '存储成功!';
            }else{
                echo '部分数据不合法或者其他异常';
            }
            
        }else{
            echo '非post提交,所以载入失败';
        }
    

    总结:主要的核心症结在于,post过来后的数据,接下来的工作是由model层来完成的。就不要继续玩$_POST了。
    希望可以帮到你!

    如果大家觉得还有其他的比较方便的方式,还望告知!
    我是鬼鬼,鬼一浪人是也!201150612

    您对我的理解很到位,并且还纠结着是写到MODEL做操作还是写到CONTROLLER做操作。

总监 等级规则
2536/5000
资料完整度
80/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

39

Ta的访客

79