Yii2 三级联动 [ 2.0 版本 ]
网上关于yii2 三级联动的来源挺少的,并且哟不少坑,这边自己记录一下,也方便大家
需要几个前提条件:
1,你有全国省市区的数据库
2,使用脚手架创建models类
1. 安装
在composer.json中添加
"chenkby/yii2-region": "dev-master"
进入目录下打开命令行 执行
composer update
或者换在目录下打开命令行执行
composer require chenkby/yii2-region "dev-master"
在标准版中最好使用第二个方案,因为第一个为出错,至于为什么我也不知道,你知道的话可以告诉我下
2. 配置
1)在你创建的models类中添加
// 参数$parentId根据你的关联id自由修改
public static function getRegion($parentId=0)
{
$result = static::find()->where(['parent_id'=>$parentId])->asArray()->all();
return ArrayHelper::map($result, 'id', 'name');
}
2)在你要使用的controllers控制器中添加
// 直接复制就好
public function actions()
{
$actions=parent::actions();
$actions['get-region']=[
'class'=>\chenkby\region\RegionAction::className(),
'model'=>\app\models\Region::className()
];
return $actions;
}
3. 使用
// ***注意 这边的$model不是你前面创建的三级联动model类的实例
// 在views中 首先你需要使用ActiveForm
<?= $form->field($model, 'district')->widget(\chenkby\region\Region::className(),[
'model'=>$model,
// 这个url就是你在控制器中配置的函数actions中的,如果要修改需要对应
'url'=> \yii\helpers\Url::toRoute(['get-region']),
'province'=>[
'attribute'=>'province', // 这个改成你model中的字段
'items'=>Region::getRegion(),
'options'=>['class'=>'form-control form-control-inline','prompt'=>'选择省份']
],
'city'=>[
'attribute'=>'city',
'items'=>Region::getRegion($model['province']), // 这个是默认的城市,如果这个方式报错,你也可以直接输值,例:Region::getRegion(1)
'options'=>['class'=>'form-control form-control-inline','prompt'=>'选择城市']
],
'district'=>[
'attribute'=>'district',
'items'=>Region::getRegion($model['city']),
'options'=>['class'=>'form-control form-control-inline','prompt'=>'选择县/区']
]
]);
?>
最后这是原文链接
smart
注册时间:2017-11-01
最后登录:2019-02-12
在线时长:23小时2分
最后登录:2019-02-12
在线时长:23小时2分
- 粉丝3
- 金钱60
- 威望50
- 积分790
共 1 条评论
form-inline无效