如何在yii2中创建依赖下拉列表

我在backend/views/_form.php上使用此代码

  all(),'id', 'cat_name'); $CoursesSubcat = ArrayHelper::map(CoursesSubcat::find()->all(),'id', 'name'); $form = ActiveForm::begin(); ?> field($model, 'cat_id')->dropDownList($CoursesCat, ['prompt'=>'-Choose a Category-', 'onchange'=>' $.post( "'.urldecode(Yii::$app->urlManager->createUrl('coursedetail/lists&id=')).'"+$(this).val(), function( data ) { $( "select#subcat_id" ).html( data ); }); ']); echo $form->field($model, 'subcat_id') ->dropDownList( $CoursesSubcat ['prompt'=>'-Choose a Sub Category-'], ['id'=>'subcat_id'] ); ?> 

 public function actionLists($id) { echo $sql = "select * from courses_subcat where cat_id='$id' "; $models = CoursesSubcat::findBySql($sql)->asArray()->all(); //echo "
";print_r($model);exit; if(sizeof($models) >0){ echo ""; foreach($models as $model){ echo ""; } } else{ echo ""; } }

使用krajee扩展来依赖下拉

详细信息在这里Krejee依赖下拉yii2 http://demos.krajee.com/widget-details/depdrop

或按照以下说明操作:

通过composer安装扩展:

  $ php composer.phar require kartik-v/dependent-dropdown "dev-master" 

在你看来:

  use kartik\widgets\DepDrop; 

//正常的父选择

 echo $form->field($model, 'cat')->dropDownList($catList, ['id' => 'cat-id']); 

//依赖下拉列表

 echo $form->field($model, 'subcat')->widget(DepDrop::classname(), [ 'options' => ['id' => 'subcat-id'], 'pluginOptions' => [ 'depends' => ['cat-id'], 'placeholder' => 'Select...', 'url' => Url::to(['/site/subcat']) ] ]); 

//控制器

 public function actionSubcat() { $out = []; if (isset($_POST['depdrop_parents'])) { $parents = $_POST['depdrop_parents']; if ($parents != null) { $cat_id = $parents[0]; $out = self::getSubCatList($cat_id); // the getSubCatList function will query the database based on the // cat_id and return an array like below: // [ // ['id'=>'', 'name'=>''], // ['id'=>'', 'name'=>''] // ] echo Json::encode(['output'=>$out, 'selected'=>'']); return; } } echo Json::encode(['output'=>'', 'selected'=>'']); }