Variables Yii2如何从模型到控制器访问变量?

Variables Yii2如何从模型到控制器访问变量?,variables,yii,model,controller,yii2,Variables,Yii,Model,Controller,Yii2,我正在做yii2。我遇到了这样一个问题:当安装了电表并将其图像上传到服务器时,我必须向某人发送电子邮件。为此,我已经配置了swift-mailer 有一个名为Installations的模型,它具有保存所有安装数据的功能 public static function saveAll($inputs){ $coutner = 0; $arr_status = []; foreach ($inputs as $input) { $s = new Instal

我正在做
yii2
。我遇到了这样一个问题:当安装了电表并将其图像上传到服务器时,我必须向某人发送电子邮件。为此,我已经配置了
swift-mailer

有一个名为
Installations
的模型,它具有保存所有安装数据的功能

public static function saveAll($inputs){
    $coutner = 0;
    $arr_status = [];

    foreach ($inputs as $input) {
        $s = new Installations;
        foreach ((array)$input as $key => $value) {
            if($key != 'image_names') {
                if ($s->hasAttribute($key)) {
                    $s->$key = $value;

                }
            }
        }



        $user = Yii::$app->user;

        if (isset($input->auth_key) && Users::find()->where(['auth_key' => $input->auth_key])->exists()) {
            $user = Users::find()->where(['auth_key' => $input->auth_key])->one();
        }


        $s->created_by = $user->id;

        if (Installations::find()->where(['ref_no' => $input->ref_no])->exists()) {
            $arr_status[] = ['install_id' => $input->install_id, 'status' => 2, 'messages' => "Ref # Already exists"];
            continue;
        }
        $s->sync_date = date('Y-m-d H:i:s  ');

        if($s->save()){

            if ($s->istallation_status == 'Installed') {

                Meters::change_status_byinstall($s->meter_msn, Meters::$status_titles[4]);
            }
            else if ($s->istallation_status != 'Installed' && $s->comm_status =='Failed')
            {
                Meters::change_status_byinstall($s->meter_msn, Meters::$status_titles[5]);
            }
            $arr_status[] = ['install_id' => $input->install_id, 'status' => 1];
            $coutner++;

            if (isset($input->doc_images_name)) {
                foreach ($input->doc_images_name as $img) {
                    $image = new InstallationImages;
                    $image->image_name = $img->image_name;
                    $image->installation_id = $s->id;
                    $image->save();
                }
            }
            if (isset($input->site_images_name)) {
                foreach ($input->site_images_name as $img2) {
                    $image2 = new InstallationImagesSite;
                    $image2->image_name = $img2->image_name;
                    $image2->installation_id = $s->id;
                    $image2->save();
                }
            }
        }else{
            $arr_status[] = ['install_id' => $input->install_id, 'status' => 0, 'messages' => $s->errors];
        }
        $status = $s->istallation_status;
        $msn = $s->meter_msn;
        $com = $s->comm_status;
        // want to pass these variables to the controller function

    }

    return ['status' => 'OK', 'details' => $arr_status, 'records_saved' => $coutner];

}
现在有一个控制器名
InstallationController
。此控制器包含我的移动应用程序的所有
API
。下面是它的两个主要功能

public function actionAddnew()
{
    $fp = fopen('debugeeeeeee.txt', 'w+');
    fwrite($fp, file_get_contents('php://input'));
    fclose($fp);
    $inputs = json_decode(file_get_contents('php://input'));

    return Installations::saveAll($inputs);
}

 public function actionSavephoto()
{


    try {
        $count = 0;
        foreach ($_FILES as $f) {
            $dd = pathinfo($f['name']);
            if (!isset($dd['extension']) || !in_array($dd['extension'], array('jpg', 'png', 'gif'))) {
                return ['status' => 'ERROR', 'uploaded_files' => $count, 'message' => 'Invalid File'];
                break;
            }
            if (move_uploaded_file($f['tmp_name'], Installations::UPLOAD_FOLDER . $f['name'])) {
                $count++;

                return ['status' => 'OK', 'uploaded_files' => $count];

                break;
            } else {
                return ['status' => 'ERROR', 'uploaded_files' => $count];
                break;
            }
        }

    } catch (Exception $x) {
        return ['status' => 'ERROR', 'message' => $x->getMessage()];
    }
}
移动应用程序将调用
Addnew()
api,然后调用
savephoto
。现在我想将
$msn
$status
$com
值从模型传递到控制器函数
Savephoto

为此,我尝试使用
会话变量
,但仍然无法得到预期的结果

我也检查了这个问题,但它对我不起作用

我怎样才能做到呢


非常感谢您的帮助。

saveAll()
中获取这些值的唯一方法是返回它们。目前,它们是在对象上定义的,以$s为单位,每个循环都会被覆盖。最好的方法似乎是在
foreach($inputs…
循环之外创建一个数组,并附加每个创建的
安装
对象


最后返回该值,并将其(或仅将其中的相关元素)作为参数传递到
actionSavephoto()
中。然后,这些值将可访问传递的对象的属性。此处理将发生在调用
actionAddNew()
然后调用
actionSavephoto()的未绘制代码中

那么我是否应该将模型中的return语句更改为
return['status'=>'OK','details'=>$arr\u status',records\u saved'=>$coutner,$msn,$com,$status];
arr\u status
的定义旁边添加类似
$installation\u objects=[]
,然后在循环结束时将
s
保存到数组中:
$installation\u objects[]=$s;
和返回:
返回['status'=>'OK','details'=>$arr\u status',records\u saved'=>$coutner',installation\u objects'=>$installation\u objects]
在我的安装控制器中,在函数
Addnew
中,
$inputs
包含所有的安装细节。我能做些什么吗?如果你有办法将该数组传递给
actionSavephoto
,那么它将满足你的需要,是吗?你能将它作为函数参数传递吗?这件事发生了在最初调用
actionAddnew
的代码中,我看不到我在
savePhoto
中这样做的细节,`$fp=fopen('debugeeee.txt','w+');fwrite('fp,file_get_contents')php://input');fclose($fp);$inputs=json_decode(文件获取内容($php://input“);$msn=$inputs[0]->仪表msn;$status=$inputs[0]->istallation\U status;$com=$inputs[0]->comm\U status`