Php Yii2:显示没有子值的Kartik DepDrop小部件

Php Yii2:显示没有子值的Kartik DepDrop小部件,php,widget,yii2,Php,Widget,Yii2,我是Yii2的新手。我正在使用Kartik提供的DepDrop小部件。现在,我可以从column1中选取数据,但是column2中的相关数据没有显示出来。我甚至不能点击它 下面是mysql表的部分内容 ID | name | sub_ID | category 1 | up | 11 | T-shirt 1 | up | 12 | jet 2 | shoe | 21 | nike 2 | shoe | 22 | adidda 这是我的\u for

我是Yii2的新手。我正在使用Kartik提供的DepDrop小部件。现在,我可以从column1中选取数据,但是column2中的相关数据没有显示出来。我甚至不能点击它

下面是mysql表的部分内容

ID | name | sub_ID | category
1  | up   | 11     | T-shirt
1  | up   | 12     | jet
2  | shoe | 21     | nike
2  | shoe | 22     | adidda
这是我的
\u form.php
代码

<?= $form->field($model, 'category')->dropDownlist(
ArrayHelper::map(itemcategory::find()->all(), 'ID', 'name'), ['id' => 'cat_id', 'prompt' => 'Select…']
);?>

<?= $form->field($model, 'subcategory')->widget(
DepDrop::classname(), [
   'options' => ['id' => 'subcategory', 'placeholder' => 'Select…'],
    'pluginOptions' => [
        'depends' => ['cat_id'],
        'url'=>\yii\helpers\Url::to(['/positemcategory/Subcat'])
    ]
]
)?>
public function getSubCatList($cat_id)
{
    $data = self::find()->where(['ID' => $cat_id])->select(['sub_ID AS id', 'subcategory AS name'])->asArray()->all();
    return $data;
}
public function actionSubcat()
{
    $out = [];
    if (isset($_POST['depdrop_parents'])) {
        $parents = $_POST['depdrop_parents'];
        if ($parents != null) {
            $cat_id = $parents[0];
            // $out = \app\models\ItemCategory::getSubCategoryList($cat_id);
            $out = self::getSubCatList($cat_id);
            echo Json::encode(['output'=>$out, 'selected'=>'']);
            return;
        }
    }
    echo Json::encode(['output'=>'', 'selected'=>'']);
}
下面是控制器
itemcegory.php
code

<?= $form->field($model, 'category')->dropDownlist(
ArrayHelper::map(itemcategory::find()->all(), 'ID', 'name'), ['id' => 'cat_id', 'prompt' => 'Select…']
);?>

<?= $form->field($model, 'subcategory')->widget(
DepDrop::classname(), [
   'options' => ['id' => 'subcategory', 'placeholder' => 'Select…'],
    'pluginOptions' => [
        'depends' => ['cat_id'],
        'url'=>\yii\helpers\Url::to(['/positemcategory/Subcat'])
    ]
]
)?>
public function getSubCatList($cat_id)
{
    $data = self::find()->where(['ID' => $cat_id])->select(['sub_ID AS id', 'subcategory AS name'])->asArray()->all();
    return $data;
}
public function actionSubcat()
{
    $out = [];
    if (isset($_POST['depdrop_parents'])) {
        $parents = $_POST['depdrop_parents'];
        if ($parents != null) {
            $cat_id = $parents[0];
            // $out = \app\models\ItemCategory::getSubCategoryList($cat_id);
            $out = self::getSubCatList($cat_id);
            echo Json::encode(['output'=>$out, 'selected'=>'']);
            return;
        }
    }
    echo Json::encode(['output'=>'', 'selected'=>'']);
}

我想让用户按名称选择项目,并在mysql的另一个表中只保存ID,而不是全名。

使用Yii2的ArrayHelper

 $out = self::getSubCatList($cat_id);
 echo Json::encode(['output'=>ArrayHelper::map($out,'id','name'),'selected'=>'']);

因此,您将获得id为键、名称为值的数组

我认为代码看起来不错(除了奇怪的depdropajaxurl),您必须一步一步地调试它:1。查看是否在类别下拉选择中调用ajax。2.看看你在那之后得到了什么。我想也许url是关键,但根据文档我无法得到它的确切含义。如何将子类别的正确内容发送到depdrop以显示?似乎重复。答复[此处][1]。[1]: