我从某个API获取模型中的数据,在Controller中我使用它的方法,获取数据并将其放入视图中。在控制器中我获得了我需要的所有数组,在视图中我获得了不同的值。但是现在我试图使视图变化,它取决于某些条件。我的页面中有两个链接,想要点击时首先显示一个数据,另一个显示另一个数据。但是我不会创建动作来创建新视图并将相同的数据放入其中,例如actionIndex,但它具有不同的视图。我怎么能避免这种情况?如何在一个视图中显示不同的数据?
控制器:
class RatesController extends Controller
{
public function actionIndex()
{
$model = new ExchangeRates();
$privatData = $model->getPrivatRate();
$nbuData = $model->getNationalRate();
$mejData = $model->getMejBankRate();
$blackMarketData = $model->getBlackMarketRate();
$avgUSA = ($privatData[2]["buy"] + $nbuData[0]["rate"] + $mejData[0]["Buy"] + $blackMarketData[0]["Buy"] +
$privatData[2]["sale"] + $nbuData[0]["rate"] + $mejData[0]["Sale"] + $blackMarketData[0]["Sale"])/8;
return $this->render('index',['privatdata' => $privatData, 'nbudata' => $nbuData,'mejdata'=>$mejData,'blackdata' => $blackMarketData, 'avgUSA'=>$avgUSA]);
}
查看:
<div>
<h2> Курс валют на сегодня</h2>
<div class="banks">
<h3>Банки:</h3>
<h4>ПриватБанк</h4>
<h4>НБУ</h4>
<h4>МежБанк</h4>
<h4>Черный рынок</h4>
</div>
<div class="buy">
<h3> Покупка </h3>
<p><?php print_r($privatdata[2]["buy"])?></p>
<p><?php print_r($nbudata[0]["rate"])?></p>
<p><?php print_r($mejdata[0]["Buy"])?></p>
<p><?php print_r($blackdata[0]["Buy"])?></p>
</div>
<div class="sale">
<h3> Продажа </h3>
<p><?php print_r($privatdata[2]["sale"])?></p>
<p><?php print_r($nbudata[0]["rate"])?></p>
<p><?php print_r($mejdata[0]["Sale"])?></p>
<p><?php print_r($blackdata[0]["Sale"])?></p>
</div>
<div class="avg_rate">
<h3>Средний курс на сегодня:</h3>
<?php print_r($avgUSA)?>
</div>
</div>
<?= Html::a('USA', ['index.php/rates']) ?>
<?= Html::a('Euro', ['/controller/action']) ?>
答案 0 :(得分:0)
您可以让链接添加另一个变量:
<?= Html::a('USA', ['index.php/rates', 'type' => 'USA']) ?>
<?= Html::a('USA', ['index.php/rates', 'type' => 'EURO']) ?>
在你的行动中:
public function actionIndex($type) {
if($type == 'USA') {
// Do something for USA
}
elseif($type == 'EURO') {
// Do something else for EURO
}
// Call your view only once, maybe send $type as a parametter so you can make changes to some text displayed
}