我是yii的新人,我现在正在学习......
我在模型中使用此查询来获取我的列表框
的assosiative数组public function getAllCategories()
{
$cats = $this->model()->findAll(array('select'=>'id,name'));
$mainarr = array();
foreach($cats as $obj)
$mainarr["$obj->id"]=$obj->name;
return $mainarr;
}
在我的表单上,我在我的下拉列表中调用此函数作为此
<?php echo $form->dropDownList($model,'name',$model->getAllCategories()); ?>
我有很多下拉与许多不同的查询,我没有找到任何更快的方法来做到这一点,每次我必须创建上面的数组,以使其实现。如果有任何使用CActiveForm,请告诉我更好更快的解决方案填充?
答案 0 :(得分:2)
更快的方式,我不确定还有其他的。
但您可以使用CHtml::listData();
功能减少代码。至少你将减少必须在模型类中定义一个函数:
<?php
echo $form->dropDownList($model,
'name',
CHtml::listData(Modelname::model()->findAll(),'id','name')// $model->getAllCategories()
);
?>
listData();
会为您提供array('id'=>'name')
格式的关联数组。
修改强>
要遵循良好的mvc实践,您可以在控制器操作中使用listData,它会显示此表单,而不是直接显示表单视图:
public function actionFormDisplayer(){
// other code
$list_for_name_dropdown = CHtml::listData(Modelname::model()->findAll(),'id','name');
// other code
// then in render pass this value also
$this->render('viewname',
array('dropdownoptions'=>$list_for_name_dropdown, // other data to pass
));
}
然后在您的视图中,您可以使用$dropdownoptions
。
答案 1 :(得分:0)
如果要在菜单模式的下拉列表中显示菜单名称,请使用此代码
$ menu_model = Menu :: model() - &gt; findAll();
$ list = CHtml :: listData($ menu_model,'menu_id','menu_name');
echo CHtml :: dropDownList('categories',$ category,$ list,array('empty'=&gt;'(选择一个类别));`