2015-06-12 09:49:51 4337次浏览 3条回答 0 悬赏 20 金钱
$_POST['images'] = serialize($_POST['images']);

怎么写出这个在YII2里。用YII2的方法。

最佳答案

  • 鬼一浪人 发布于 2015-06-12 18:04 举报

    研究了一下,目前有了具体答案了
    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

    2 条回复
    回复于 2015-06-12 18:14 回复

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

    回复于 2015-06-12 18:17 回复

    看你个人了,对于这样的,数据的初始化,我会写在model层,因为只有当前模型才需要这样的被序列化的数据不是吗?酌情考虑下,如果需要的多了,model也麻烦,那样就建议写在controller里面了,集成化处理,加油。记得给好评哦

    , , 觉得很赞
您需要登录后才可以回答。登录 | 立即注册
trylife
总监

trylife Beijing

注册时间:2015-03-26
最后登录:2020-12-07
在线时长:51小时55分
  • 粉丝39
  • 金钱1626
  • 威望40
  • 积分2536

热门问题