serendipity_hq/component-geo-builder

解析 Geonames 国家导出的数据,并将数据以机器可读的格式导出。

0.3.0 2022-01-08 12:06 UTC

This package is auto-updated.

Last update: 2024-09-19 08:09:33 UTC


README

Serendipity HQ 地理构建器

解析 Geonames 国家导出的数据,并将数据以机器可读的格式导出。
它从 [Geonames 导出](https://www.geonames.org/export/zip/) 中下载国家信息。
已准备好集成到 Symfony 应用中。

支持

在以下平台上测试

当前状态

Coverage Maintainability Rating Quality Gate Status Reliability Rating Security Rating Technical Debt Vulnerabilities

Phan PHPStan PSalm PHPUnit Composer PHP CS Fixer Rector

特性

  • 下载国家导出数据
  • 构建您在应用程序中使用的自定义国家列表

你喜欢这个库吗?
留下 ★

或者运行
composer global require symfony/thanks && composer thanks
来感谢您当前项目中使用的所有库,包括这个!

安装和配置

使用 Composer 安装 Component GeoBuilder

composer req serendipity_hq/component-geo-builder

此库遵循 http://semver.org/ 版本控制约定。

然而,直到版本 1,次要版本被视为主要版本。

因此,在次要版本之间(0.1 > 0.2 > 0.3)可能会出现公共 API 的中断。

组件本身是稳定的,可以在生产中使用,尽管它不太灵活。

查看问题了解我们打算实现的内容。

在 Symfony 应用程序中注册命令

打开文件 config/services.yaml 并添加 geobuilder 命令的类

# config/services.yaml

services:
    ...
    SerendipityHQ\Component\GeoBuilder\Command\BuildCommand:
        $dumpDir: '%kernel.cache_dir%/geobuilder'

    # You also need to autowire the Guzzle CLient if you don't already have one
    GuzzleHttp\Client: ~
    ...

构建所需的列表

要构建所需的列表,只需运行命令 geobuilder:build 并附加您想要构建列表的国家

$ bin/console geobuilder:build it de

默认情况下,命令使用层次结构读取器,并将创建大量 json 文件在您的 Symfony 应用程序 kernel.cache_dir/geobuilder 文件夹中。

您可以阅读完整的文档,了解更多关于读取器、保存文件夹等内容。

现在,让我们继续使用 GeoBuilder

下一步是创建一个表单,其中包含我们刚刚构建的数据。

创建表单

要使用表单类型,您需要将它们注册为服务,以便它们可以被 Symfony 正确初始化。

要注册它们,打开文件 config/services.yaml 并添加 HierarchyJsonType

# config/services.yaml

services:
    ...
    SerendipityHQ\Component\GeoBuilder\Reader\HierarchyJsonReader:
        $dataFolderPath: '%kernel.cache_dir%/geobuilder'
    SerendipityHQ\Component\GeoBuilder\Bridge\Symfony\Form\Type\HierarchyJsonType: ~

然后,在您的表单中,您可以添加 HierarchyJsonType

class UserZoneType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array<string,mixed>  $options
     * @suppress PhanUnusedPublicMethodParameter
     */
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder->add('geobuilder', HierarchyJsonType::class, ['country' => 'it']);
    }
}

关于 countries.json 文件

此文件将仅包含您使用 bin/console geobuilder:build 命令构建的国家。

您可以使用 symfony/intl 组件的 Countries::getNames() 方法获取本地化国家的完整列表。

但是,Symfony 组件将返回所有国家,即使您没有构建它们。

你喜欢这个库吗?
留下 ★

或者运行
composer global require symfony/thanks && composer thanks
来感谢您当前项目中使用的所有库,包括这个!