Php Yii2:显示没有子值的Kartik DepDrop小部件
我是Yii2的新手。我正在使用Kartik提供的DepDrop小部件。现在,我可以从column1中选取数据,但是column2中的相关数据没有显示出来。我甚至不能点击它 下面是mysql表的部分内容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
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]: