无法从控制器呈现php变量以在yii2中查看 [英] Unable to render php variables from controller to view in 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屋!