无法从控制器呈现php变量以在yii2中查看 [英] Unable to render php variables from controller to view in yii2

查看:70
本文介绍了无法从控制器呈现php变量以在yii2中查看的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是yii2的新手.我正在将两个变量传递到create视图中,该视图部分是从_form呈现的.但是以某种方式,我无法传递这些变量,并且会出错.

I am new to yii2. I am passing two variables into my create view which is partially rendered from _form. But somehow I am unable to pass these variables, and getting error.

我做了什么?

在我的action控制器中,我声明了两个global变量

In my action controller I have declared two global variables

global $the_meter_id;
global $the_meter_msn;

然后在其他情况下,我会得到当前的id和当前的serial编号.

Then in my else case condition I am getting the current id and current serial number.

else{//$meter_alive condition else
                    \Yii::$app->getSession()->setFlash('error',  '
 <div class="alert alert-error alert-dismissable">
 <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
 <strong>Validation error! </strong> Try GPRS Communication Again.</div>');

                   $model->attributes=$_REQUEST['MetersInventoryStore'];

                   $sim = MetersInventoryStore::findOne($_REQUEST['selected_meters']);
                   $the_meter_id = $sim->meter_id;
                   $the_meter_msn=$sim->meter_serial;

                   /*print_r($the_meter_msn);
                   print_r($the_meter_id);
                   die();*/

                    return $this->render('create', [
                        'model'=>$model,
                        'the_meter_id'=>$the_meter_id,
                        'the_meter_msn'=>$the_meter_msn

                    ]);
}

然后在我的create.php中,我完成了以下操作

Then in my create.php I have done the following

 <?= $this->render('_form', [
    'model' => $model,
    'the_meter_id'=>$the_meter_id,
    'the_meter_msn'=> $the_meter_msn

]) ?>

最后是我的_form

<div class="selcted-meters">
        <input type="hidden" name="selected_meters" value="<?php echo $the_meter_id;?>"/>
        <p><b> <?php echo $the_meter_msn;?></b><br /></p>
        <a href="#" onclick="$(this).closest('selcted-meters').remove()">X</a>    <!--value="'+datum.id+'" />'+datum.meter_serial+'<a onclick="$(this).closest(\'.selcted-meters\').remove()">X</a></div>'-->
    </div>

上面的代码是通过遵循解决方案编写的.当我运行此代码时,在create.php

The above code is written by following this solution. When I am running this code I am getting the error Undefined variable: the_meter_id in create.php

我为使事情正常运行做了什么?

我已经尝试了每种可能的方法来将变量呈现/传递到视图,例如将变量public放入然后直接在render中获取值,也尝试从create.php中删除变量,但是仍然出现相同的错误.

I have tried each and every possible way to render/pass my variables to the view, like putting the variables public and then getting the values direct in the render also tried to remove the variables from create.php but still getting same error.

更新代码

我已经更新了If条件,并将变量设为公开

I have updated my If condition and made the variables public

 public $the_meter_id;
 public $the_meter_msn;

在我的action

if($meter_alive=='Yes') {
                    //$model->scenario ='Sim_installed';
                    if (isset($_REQUEST['selected_meters'])) {

                        foreach ($_REQUEST['selected_meters'] as $k => $v) {
                            $m = MetersInventoryStore::findOne($v);
                            $m->load(Yii::$app->request->post());
                            $m->status = MetersInventoryStore::$statuses[1];
                            if ($m->save()) {
                                Meters::change_status($m->meter_id, Meters::$status_titles[2]);
                                \Yii::$app->getSession()->setFlash('success',  '
 <div class="alert alert-success alert-dismissable">
 <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
 <strong>Communication is Verified </strong> </div>');
                            }
                        }

                        return $this->render('create', [
                            'model' => $model,
                            $this->the_meter_id,
                            $this->the_meter_msn
                        ]);
                    } else if ($model->load(Yii::$app->request->post()) && $model->save()) {
                        Meters::change_status($model->meter_id, Meters::$status_titles[2]);
                        return $this->redirect(['view', 'id' => $model->id]);
                    } else {
                        return $this->render('create', [
                            'model' => $model,
                            $this->the_meter_id,
                            $this->the_meter_msn
                        ]);
                    }
                }else{//$meter_alive condition else
                    \Yii::$app->getSession()->setFlash('error',  '
 <div class="alert alert-error alert-dismissable">
 <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
 <strong>Validation error! </strong> Try GPRS Communication Again.</div>');
                    $model->attributes=$_REQUEST['MetersInventoryStore'];
                    /*$model->attributes=$_REQUEST['selected_meters'];*/
                    $sim = MetersInventoryStore::findOne($_REQUEST['selected_meters']);
                  $this->the_meter_id =$sim->meter_id;
                  $this->the_meter_msn=$sim->meter_msn;

                   /*print_r($the_meter_msn);
                   print_r($the_meter_id);
                   die();*/
                   /*return $this->render('_form', array('the_meter_id' => $this->the_meter_id, 'the_meter_msn'=> $this->the_meter_msn    ));*/
                    return $this->render('create', [
                        'model'=>$model,
                        $this->the_meter_id,
                        $this->the_meter_msn

                    ]);
}

然后在我的create.php

<?php

 use yii\helpers\Html;


 /* @var $this yii\web\View */
/* @var $model common\models\MetersSimInstallation */

$this->title = 'Create Meters Sim Installation';
$this->params['breadcrumbs'][] = ['label' => 'Meters Sim Installations',   'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;

 ?>


 <section class="content-header">
<h1>SIM Installation</h1>
</section>
<section class="content">
<div class="box">
    <div class="box-body">
        <div id="statusMsg" >
                     <?= Yii::$app->session->getFlash('error');?>
                     <?= Yii::$app->session->getFlash('success');?>
         </div>

<?= $this->render('_form', [
    'model' => $model,
     $this->the_meter_id,
     $this->the_meter_msn
]) ?>

    </div>
</div>
 </section>

更新代码2

if( isset($_REQUEST['selected_meters']))
        {
            $m = MetersInventoryStore::findOne($_REQUEST['selected_meters']);
            $msn = $m->meter_serial; // current selected meter serial number is saved
            $date_time =  str_replace(' ','T',date('Y-m-d H:i:s')); // current date time
            $api_url = 'http://IP:Port/api/meters/GetByMsn/' . $msn . '/' . $date_time ; // my base URL

            $curl = curl_init($api_url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: MY AUTHENTICATION CODE'));

             $curl_response = curl_exec($curl);
             $json=json_decode($curl_response);
             $meter_alive= $json->data->Response;

                if($meter_alive=='Yes') {
                    //$model->scenario ='Sim_installed';
                    if (isset($_REQUEST['selected_meters'])) {

                        foreach ($_REQUEST['selected_meters'] as $k => $v) {
                            $m = MetersInventoryStore::findOne($v);
                            $m->load(Yii::$app->request->post());
                            $m->status = MetersInventoryStore::$statuses[1];
                            if ($m->save()) {
                                Meters::change_status($m->meter_id, Meters::$status_titles[2]);
                                \Yii::$app->getSession()->setFlash('success',  '
 <div class="alert alert-success alert-dismissable">
 <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
 <strong>Communication is Verified </strong> </div>');
                            }
                        }

                        return $this->render('create', [
                            'model' => $model,
                        ]);
                    } else if ($model->load(Yii::$app->request->post()) && $model->save()) {
                        Meters::change_status($model->meter_id, Meters::$status_titles[2]);
                        return $this->redirect(['view', 'id' => $model->id]);
                    } else {
                        return $this->render('create', [
                            'model' => $model,
                        ]);
                    }
                }else{//$meter_alive condition else
                    \Yii::$app->getSession()->setFlash('error',  '
 <div class="alert alert-error alert-dismissable">
 <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
 <strong>Validation error! </strong> Try GPRS Communication Again.</div>');
                    $model->attributes=$_REQUEST['MetersInventoryStore'];

                    $sim = MetersInventoryStore::findOne($_REQUEST['selected_meters']);



                    return $this->render('create', [
                        'model'=>$model,
                        'the_meter_id' => $this->the_meter_id=$sim->meter_id,
                        'the_meter_msn' => $this->the_meter_msn=$sim->meter_msn
                    ]);


                }
        }
             return $this->render('create', [
                'model' => $model,

            ]);

运行代码后,我在create.php

任何帮助将不胜感激

推荐答案

在Controller中使用..

In Controller use ..

return $this->render('create', [
       'model'=>$model,
       'the_meter_id'=>$the_meter_id,
       'the_meter_msn'=>$the_meter_msn
]);

愚蠢的错误.. 使用

<?= $this->render('_form', [
    'model' => $model,
    'the_meter_id'=>$the_meter_id,
    'the_meter_msn'=>$the_meter_msn
]) ?>

代替

<?= $this->render('_form', [
    'model' => $model,
     $this->the_meter_id,
     $this->the_meter_msn
]) ?>

在您的create.php

这篇关于无法从控制器呈现php变量以在yii2中查看的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆