nsu-soft/

yii-dadata

Yii 2 框架的 DaData 模块

0.5.1 2024-02-27 03:09 UTC

README

安装

如果您没有Composer,可以通过访问getcomposer.org上的说明进行安装。

使用以下命令安装此库

composer require nsu-soft/yii-dadata

配置

将以下行添加到您的配置文件中

'modules' => [
    'dadata' => [
        'class' => 'nsusoft\dadata\Module',
        'token' => 'enter-your-dadata-token',
        'secret' => 'enter-your-dadata-secret',
        'cachePriority' => [DbHandler::class],
    ],
],

了解更多关于 Yii2 中模块配置的信息。

迁移

如果您想将 DaData 的响应保存到本地数据库,请应用迁移

yii migrate --migrationPath=@vendor/nsu-soft/yii-dadata/src/migrations

用法

清理地址

<?php

namespace app\forms;

use app\models\City;
use app\models\Region;
use nsusoft\dadata\helpers\CleanHelper;
use nsusoft\dadata\plugins\TimezoneConverter;
use nsusoft\dadata\validators\AddressValidator;
use yii\base\Model;

class AddressForm extends Model
{
    /**
     * @var string 
     */
    public $address;
    
    /**
     * @var City 
     */
    private $city;

    /**
     * @var Region 
     */
    private $region;

    /**
     * @inheritDoc
     */
    public function rules(): array
    {
        return [
            [['address'], 'string', 'max' => 255],
            [['address'], AddressValidator::class, 'maxPrecision' => AddressValidator::PRECISION_STREET, 'minPrecision' => AddressValidator::PRECISION_BUILDING],
        ];
    }

    /**
     * @return bool
     */
    private function saveRegion(): bool
    {
        $address = CleanHelper::address($this->address);
        
        $this->region = new Region();
        $this->region->name = $address->region;
        $this->region->type = $address->regionType;
        $this->region->type_full = $address->regionTypeFull;
        $this->region->name_with_type = $address->regionWithType;
        $this->region->fias_id = $address->regionFiasId;
        $this->region->timezone = TimezoneConverter::toIana($address);

        return $this->region->save();
    }
    
    /**
     * @return bool
     */
    private function saveCity(): bool
    {
        $address = CleanHelper::address($this->address);
        
        $this->city = new City();
        $this->city->name = $address->city;
        $this->city->type = $address->cityType;
        $this->city->type_full = $address->cityTypeFull;
        $this->city->name_with_type = $address->cityWithType;
        $this->city->fias_id = $address->cityFiasId;
        $this->city->region_id = $this->region->id;

        return $this->city->save();
    }

    /**
     * @return bool
     */
    public function save(): bool
    {
        if (!$this->validate()) {
            return false;
        }
        
        return $this->saveRegion() && $this->saveCity(); 
    }
}

建议地址

<?php

namespace app\controllers;

use nsusoft\dadata\helpers\SuggestHelper;
use yii\web\Controller;

class SuggestController extends Controller
{
    /**
     * @param string $query
     * @return array
     */
    public function actionAddress(string $query): array
    {
        $items = [];
        
        foreach (SuggestHelper::address($query) as $suggest) {
            $items[] = $suggest->value;
        }
        
        return $items;
    }
}

更多用法示例,请参阅 src/helperssrc/validators 目录。