Yii2:没有子值的Kartik DepDrop小部件出现

时间:2015-04-11 04:53:02

标签: 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

这是我的_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'])
    ]
]
)?>

这是我的模型ItemCategory.php代码

public function getSubCatList($cat_id)
{
    $data = self::find()->where(['ID' => $cat_id])->select(['sub_ID AS id', 'subcategory AS name'])->asArray()->all();
    return $data;
}

这是控制器Itemcategory.php代码

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而不是全名。

1 个答案:

答案 0 :(得分:0)

使用Yii2的ArrayHelper。

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

因此,您将获得具有id作为键和名称作为值的数组。