在控制器中准备数据,而不是在视图中(yii)

在控制器中准备数据,而不是在视图中(yii),yii,controller,Yii,Controller,我在我的Yii webapp中制作了“齿轮箱”-dropDownList,一切都很完美,它在DB中存储下一个值(1=>Manual,2=>Manual Automat(Tiptronik),3=>Automat),现在我在模板(view.php)中显示它,带有如此不漂亮的if块: 变速箱: " 如果($model->变速箱==1){ 回声“手册”; }elseif($型号->变速箱==2){ 回声“手动自动装置”; }否则{ 回声“自动机”; } " 请告诉我,我应该在控制器中准备这些数据吗?

我在我的Yii webapp中制作了“齿轮箱”-dropDownList,一切都很完美,它在DB中存储下一个值(1=>Manual,2=>Manual Automat(Tiptronik),3=>Automat),现在我在模板(view.php)中显示它,带有如此不漂亮的if块:

变速箱: " 如果($model->变速箱==1){ 回声“手册”; }elseif($型号->变速箱==2){ 回声“手动自动装置”; }否则{ 回声“自动机”; } "


请告诉我,我应该在控制器中准备这些数据吗?如果可能的话,你能告诉我怎么做吗。

我认为在这种简单的情况下,没有什么可以做的,但你可以在控制器中这样准备:

public function getGearboxName() {
    if ($model->gearbox == 1) {
        return 'Manual';
    } elseif($model->gearbox == 2) {
        return 'Manual-Automat';
    } else {
        return 'Automat';
    }
}
控制器:

  if ($model->gearbox == 1) { 
     $gearbox = 'Manual'; 
  } elseif($model->gearbox == 2) { 
     $gearbox = 'Manual-Automat'; 
  } else { 
     $gearbox = 'Automat'; 
  } 

$this->render('view',array('gearbox'=>$gearbox))
echo $gearbox;
查看:

  if ($model->gearbox == 1) { 
     $gearbox = 'Manual'; 
  } elseif($model->gearbox == 2) { 
     $gearbox = 'Manual-Automat'; 
  } else { 
     $gearbox = 'Automat'; 
  } 

$this->render('view',array('gearbox'=>$gearbox))
echo $gearbox;

另一个选项是使用以下选项将其添加到模型中:

public function getGearboxName() {
    if ($model->gearbox == 1) {
        return 'Manual';
    } elseif($model->gearbox == 2) {
        return 'Manual-Automat';
    } else {
        return 'Automat';
    }
}
这样,您就可以通过模型中的
gearboxName
属性访问该值:

echo $model->gearboxName;

是的,我知道这是避免每个方法中的代码多拷贝的方法。借此机会,我想祝贺你我们的专业节日——“网站管理员节”,它将在4月4日庆祝。当然,如果你需要更多的代码,这是最好的方式。但是如果你在控制器中只使用一次,我就不会用它污染整个模型:)更好的做法是创建一个关系,这样你就可以通过
$model->gearbox->name
:-)访问名称了。很好,现在我尝试多次使用它。因此,如果我在view.php模板中显示它,它工作得很好,现在我想在_view.php模板中显示它,因此,我认为,我必须使用renderPartial。当然,对于更复杂的数据,它会更复杂。您还可以在控制器或模型中使用自定义函数(如Michiel的答案中),使代码更具可读性。如果您满意,请投票/接受答案:)