Yii2, Kartik DepDrop 更新预选值

Jim*_*ton 5 php yii2

我有四个相关的层次结构下拉列表 library > catalog > category > subject

我正在使用kartik depdrop,一切都很好,但在更新时我找不到任何预选值的解决方案。我需要的是在更新时显示所有其他值的预选值,以便用户也可以更改选择。

这是我的代码。

_form.php

<div class="inner-addon right-addon">
        <div class="catalog-input">
            <span><strong>Library</strong></span>
            <?php echo $form->field($modelDep, 'lesson_name[0]')->dropDownList($libList, [
                'prompt' => 'Select Library',
                'id'=>'lib-id-1',
                'name'=>'Lesson[library]'
            ])->label(false); ?>
        </div> 
        <div class="category-input">
            <span><strong>Catalog</strong></span>
            <?php
            echo $form->field($modelDep, 'lesson_name[1]')->widget(DepDrop::classname(), [  
                'options'=>['id'=>'catalog-id-1', 'name'=>'Lesson[catalog]'],
                'pluginOptions'=>[
                    'depends'=>['lib-id-1'],
                    'placeholder'=>'Select Catalog',
                    'url'=>Url::to(['/lesson/catalog'])
                ]
            ])->label(false);
            ?>
        </div> 
        <div class="subject-input">
            <span><strong>Category</strong></span>
            <?php
                echo $form->field($modelDep, 'lesson_name[2]')->widget(DepDrop::classname(), [
                    'options'=>['id'=>'cat-id-1', 'name'=>'Lesson[category]'],
                    'pluginOptions'=>[
                        'depends'=>['catalog-id-1'],
                        'placeholder'=>'Select Category',
                        'url'=>Url::to(['/lesson/category'])
                    ]
                ])->label(false);
            ?>
        </div> 
        <div class="topic-input">
            <span><strong>Subject</strong></span>
            <?php
                echo $form->field($modelDep, 'lesson_name[3]')->widget(DepDrop::classname(), [
                    'options'=>['id'=>'subject-id-1', 'name'=>'Lesson[fk_subject]'],
                    'pluginOptions'=>[
                        'depends'=>['cat-id-1'],
                        'placeholder'=>'Select Subject',
                        'url'=>Url::to(['/lesson/subject'])
                    ]
                ])->label(false);
            ?>
        </div> 
    </div>
Run Code Online (Sandbox Code Playgroud)

控制器

public function actionCatalog() {
    $out = [];
    if (isset($_POST['depdrop_parents'])) {
        $parents = $_POST['depdrop_parents'];
        if ($parents != null) {
            $lib_id = $parents[0];
            $out = $this::getCatalogList($lib_id);
            echo Json::encode(['output'=>$out, 'selected'=>'']);
            return;
        }
    }
    echo Json::encode(['output'=>'', 'selected'=>'']);
}
public static function getCatalogList($lib_id){
    $company_name = array_shift((explode(".", $_SERVER['HTTP_HOST'])));
    $company = \common\models\Company::find()->where(['company_name' => $company_name])->one();
    $data= \common\models\Catalog::find()
       ->where(['fk_library'=>$lib_id,'fk_company'=>$company->id])
       ->select(['id','catalog_name AS name' ])->asArray()->all();
    return $data;
}



public function actionCategory() {
    $out = [];
    if (isset($_POST['depdrop_parents'])) {
            $parents = $_POST['depdrop_parents'];
            if ($parents != null) {
                $cat_id = $parents[0];
                $out = $this::getCategoryList($cat_id);
                echo Json::encode(['output'=>$out, 'selected'=>'']);
                return;
            }
        }
    echo Json::encode(['output'=>'', 'selected'=>'']);
}
public static function getCategoryList($cat_id){
    $company_name = array_shift((explode(".", $_SERVER['HTTP_HOST'])));
    $company = \common\models\Company::find()->where(['company_name' => $company_name])->one();
    $data= \common\models\Category::find()
       ->where(['fk_catalog'=>$cat_id,'fk_company'=>$company->id])
       ->select(['id','category_name AS name' ])->asArray()->all();
    return $data;
}





public function actionSubject() {
    $out = [];
    if (isset($_POST['depdrop_parents'])) {
            $parents = $_POST['depdrop_parents'];
            if ($parents != null) {
                $category_id = $parents[0];
                $out = $this::getSubjectList($category_id);
                echo Json::encode(['output'=>$out, 'selected'=>'']);
                return;
            }
        }
    echo Json::encode(['output'=>'', 'selected'=>'']);
}
public static function getSubjectList($category_id){
    $company_name = array_shift((explode(".", $_SERVER['HTTP_HOST'])));
    $company = \common\models\Company::find()->where(['company_name' => $company_name])->one();
    $data= \common\models\Subject::find()
       ->where(['fk_category'=>$category_id,'fk_company'=>$company->id])
       ->select(['id','subject_name AS name' ])->asArray()->all();
    return $data;
}
Run Code Online (Sandbox Code Playgroud)

小智 1

您是否尝试过设置“选定”数组属性?清理后您的操作之一:

public function actionSubject() {
    $out = [];
    if (isset($_POST['depdrop_parents'])) {
        $parents = $_POST['depdrop_parents'];
        if ($parents != null) {
            $category_id = $parents[0];
            $out = $this::getSubjectList($category_id);
            $pre_selected_subject_id = 5; // or whatever you want to be default
        }
    }
    echo Json::encode(['output'=>$out, 'selected'=>$pre_selected_subject_id ]);
}
Run Code Online (Sandbox Code Playgroud)