我是yii2
的新手。我将两个变量传递到我的 create
View 中,该 View 部分是从 _form
渲染的。但不知何故,我无法传递这些变量,并出现错误。
我做了什么?
在我的action
Controller 中,我声明了两个全局
变量
global $the_meter_id;
global $the_meter_msn;
然后,在其他情况下,我将获取当前的id
和当前的serial
号。
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
中我完成了以下操作
<?= $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>
上面的代码是按照this编写的解决方案。当我运行此代码时,我在 create.php
undefined variable :the_meter_id
我做了什么来让事情顺利进行?
我尝试了各种可能的方法来渲染/传递变量到 View ,例如将变量放在 public
中,然后直接在 render
中获取值尝试从 create.php
中删除变量,但仍然收到相同的错误。
更新代码
我已经更新了 If 条件并将变量公开
public $the_meter_id;
public $the_meter_msn;
在我的行动
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
中获取未知属性:yii\web\View::the_meter_id
任何帮助将不胜感激
最佳答案
在 Controller 中使用..
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 - 无法将 php 变量从 Controller 渲染到 yii2 中查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46924670/