华夏南 2016-11-15 19:05:25 13861次浏览 16条评论 34 17 0

1、获取源码:https://github.com/chenkby/yii2-region

2、安装

添加到你的composer.json文件

"chenkby/yii2-region": "dev-master"

切换到项目目录

composer update;

3、配置

1) 在地区的Model中添加以下方法

public static function getRegion($parentId=0)
{
    $result = static::find()->where(['parent_id'=>$parentId])->asArray()->all();
    return ArrayHelper::map($result, 'id', 'name');
}

2) 在controller中添加以下action

public function actions()
{
    $actions=parent::actions();
    $actions['get-region']=[
        'class'=>\chenkby\region\RegionAction::className(),
        'model'=>\app\models\Region::className()
    ];
    return $actions;
}

3) 在common/config里的main.php中添加 urlManager的enablePrettyUrl的,即隐藏index.php

"urlManager" => [    
    //用于表明urlManager是否启用URL美化功能,在Yii1.1中称为path格式URL,    
    // Yii2.0中改称美化。   
    // 默认不启用。但实际使用中,特别是产品环境,一般都会启用。   
    "enablePrettyUrl" => true,    
    // 是否启用严格解析,如启用严格解析,要求当前请求应至少匹配1个路由规则,    
    // 否则认为是无效路由。    
    // 这个选项仅在 enablePrettyUrl 启用后才有效。    
    "enableStrictParsing" => false,    
    // 是否在URL中显示入口脚本。是对美化功能的进一步补充。    
    "showScriptName" => false,    
    // 指定续接在URL后面的一个后缀,如 .html 之类的。仅在 enablePrettyUrl 启用时有效。    
    "suffix" => "",    
    "rules" => [        
        "<controller:\w+>/<id:\d+>"=>"<controller>/view",  
        "<controller:\w+>/<action:\w+>"=>"<controller>/<action>"    
    ],
],

4、使用

<?= $form->field($model, 'district')->widget(\chenkby\region\Region::className(),[
    'model'=>$model,
    'url'=> \yii\helpers\Url::toRoute(['get-region']),
    'province'=>[
        'attribute'=>'province',
        'items'=>Region::getRegion(),
        'options'=>['class'=>'form-control form-control-inline','prompt'=>'选择省份']
    ],
    'city'=>[
        'attribute'=>'city',
        'items'=>Region::getRegion($model['province']),
        'options'=>['class'=>'form-control form-control-inline','prompt'=>'选择城市']
    ],
    'district'=>[
        'attribute'=>'district',
        'items'=>Region::getRegion($model['city']),
        'options'=>['class'=>'form-control form-control-inline','prompt'=>'选择县/区']
    ]
]);
?> 
觉得很赞
  • 评论于 2016-12-05 18:54 举报

    能不能把注释也写一下?刚接触YII框架

    1 条回复
    评论于 2016-12-06 09:07 回复

    稍后我把每个步骤的图片贴出来给你参照看看吧

  • 评论于 2016-12-06 09:40 举报

    1.png

    2.png

    3.png

    4.png

    5.png

    6.png

    1 条回复
    评论于 2016-12-08 09:34 回复

    非常感谢。分享。转载到我的博客去了哦。。。

    , 觉得很赞
  • 评论于 2016-12-06 13:27 举报

    谢谢分享,收藏了

  • 评论于 2016-12-06 16:03 举报

    nice

  • 评论于 2016-12-17 17:43 举报

    可以把你的地区表截个图让我看看

    1 条回复
    评论于 2016-12-18 08:45 回复

    在扩展中有的,你按下方图片的路径找,在一个压缩包里

  • 评论于 2016-12-18 08:47 举报

    地区表路径:12.png

    1 条回复
    评论于 2016-12-19 13:06 回复

    谢谢了!完美解答

    觉得很赞
  • 评论于 2017-03-25 08:18 举报

    错误1.png

    'province'=>[

        'attribute'=>'province', 问一下,大神,这里属性province,是哪里的属性,来自哪里呢。搞了一晚,都没有吧这几个属性来自哪里这么用对接上了。
    

    'attribute'=>'city',
    'attribute'=>'district',
    这个操作这是修改那里的属性呢?

    2 条回复
    评论于 2017-03-29 17:48 回复

    应该是在模型中添加标签吧,我也不是很懂

    评论于 2018-11-21 16:56 回复

    和你一样的问题,你怎么解决的?求指导

  • 评论于 2017-09-01 16:09 举报

    文件引用失败了 啥情况大佬

  • 评论于 2017-09-08 11:57 举报

    一样的方法 出现了500错误是什么原因

  • 评论于 2018-11-21 11:24 举报

    先mark

  • 评论于 2018-11-21 16:25 举报

    Class 'chenkby\region\RegionAction' not found 这是怎么了??

    1 条回复
    评论于 2020-12-21 17:14 回复

    这个问题解决了没,我也遇到了,不知道该怎么解决了,而且包我也导进来了,就是不对

    觉得很赞
  • 评论于 2018-11-21 17:23 举报

    好多信息都没有,还要一个个排查,到最后还是报错,

    'attribute'=>'city',
    'attribute'=>'district',
    这个操作这是修改那里的属性呢?

    Getting unknown property: common\models\Region::province

    2 条回复
    评论于 2019-06-20 17:48 回复

    这是model层的公共属性,比如数据库里的字段

    评论于 2019-09-15 16:46 回复

    这是 region —odel层的公共属性,添加

    public $province;
    public $city;
    public $district;
    

    三个属性就 ok了。

  • 评论于 2018-12-03 09:53 举报

    楼主,你这个省市信息是本地存储的还是线上获取的

  • 评论于 2019-09-15 16:47 举报


    这是 region model层的公共属性,添加
    public $province;
    public $city;
    public $district;
    三个属性就 ok了。

  • 评论于 2020-03-10 00:28 举报

    三级省市区联动.png
    首先,感谢原作者提供的这个小插件,节约了很多的开发时间。
    项目的说明文件说“如果不需要县/区,可以把district删除。”
    实际上如果把“district”删除会提示“Undefined variable: districtId”错误。
    我把项目源代码稍微做了一下修改,如上图所示。
    如果作者看到了,还请把这个bug解决了,以便后来的使用者不再有这个烦恼。

  • 评论于 2020-05-29 20:19 举报

    微信图片_20200529201535.png
    请教一下 这个我在搜索时用的 搜索后怎么让下拉框显示 刚才选择的省市呢?

您需要登录后才可以评论。登录 | 立即注册