我是yii的新手,此刻我正在学习。。。
我在模型中使用这个查询来获取我的列表框的关联数组
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的解决方案,请告诉我更好、更快的填充解决方案?
更快的方法,我不确定还有其他方法。
但是您可以使用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
。
如果您想从菜单模式下拉显示菜单名称,请使用以下代码$menu_model=菜单::model()->findAll()
$list=CHtml::listData($menu_model,'menu_id','menu_name');echo CHtml::dropDownList("类别",$category,$list,array("空"=>"(选择类别"));`