php yii框架直接按模型填充CActiveform下拉列表数据?

时间:2012-07-20 20:44:45

标签: php forms yii associative-array dropdownbox

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

2 个答案:

答案 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;'(选择一个类别));`