2

我是 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,请告诉我更好更快的填充解决方案?

4

2 回答 2

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.

于 2012-07-20T21:08:20.763 回答
0

如果要在菜单模式的下拉菜单中显示菜单名称,请使用此代码 $menu_model = Menu::model()->findAll();
$list = CHtml::listData($menu_model, 'menu_id', 'menu_name'); echo CHtml::dropDownList('categories', $category, $list, array('empty' => '(选择一个类别')); `

于 2014-07-14T09:46:36.180 回答