非 sapiens / realaddressfactory
从谷歌地图创建真实世界的街道地址,用于数据库填充、单元测试或任何其他用途。支持 Laravel 8+ 和 Faker。
Requires
- php: >=7.3.0
- fakerphp/faker: ^1.13
- illuminate/support: >=8.0
- laravel/framework: >=8.0
- toin0u/geocoder-laravel: ^4.4
- willdurand/geocoder: ^4.4
Requires (Dev)
- orchestra/testbench: ^6.12
README
关于
这个 Laravel 8+ 库创建真实的 100% 真实地址,包含完整的地址详情和经纬度坐标。使用谷歌地图 API,可以使用 RealAddress 类创建这些地址,同时也支持 Faker,您可以在数据库填充中使用 RealAddress!
安装
使用以下命令通过 composer 需求此包
composer require nonsapiens/realaddressfactory --dev
谷歌地图 API
由于此库依赖于谷歌地图,因此您需要在 .env
文件中定义 Google Maps API 密钥
GOOGLE_MAPS_API_KEY=abcdefghijklmnopqrstuv
如果您没有 API 密钥,请在这里 获取一个
用法
RealAddress 提供了三种生成真实世界地址的方法。每种方法都返回 \Geocoder\Provider\GoogleMaps\Model\GoogleAddress
类,它将谷歌地图 API 响应标准化,便于使用和阅读。默认情况下,RealAddress 支持以下国家的真实地址生成
- 美国
- 英国
- 法国
- 德国
- 南非
- 俄罗斯
您可以通过在 config/realaddress.php
配置文件中添加额外的国家来扩展 RealAddress。此配置文件还定义了在特定国家可以创建哪些城市的地址。可以在以下位置定义更多城市。
Faker
RealAddress 为 Faker 的 \Faker\Generator
类实例提供了额外的功能。下面的代码示例展示了在工厂类中的典型用法
class UserFactory extends Factory { protected $model = User::class; public function definition(): array { /** @var GoogleAddress $address */ $address = $this->faker->britishAddress(); return [ 'first_name' => $this->faker->firstName($gender), 'last_name' => $this->faker->lastName, 'full_address' => $address->getFormattedAddress(), 'latitude' => $address->getCoordinates()->getLatitude(), 'longitude' => $address->getCoordinates()->getLongitude() ]; } }
同样,地址可以被限制为特定的城市: $address = $faker->britishAddress('London');
或者可以随机生成多个定义城市之间的地址: $address = $faker->britishAddress(['London', 'Manchester']);
... 其中这些城市必须在 config/realaddress.php
中定义才能使用。
可用的现成 faker 函数包括
britishAddress()
usaAddress()
germanAddress()
frenchAddress()
southAfricanAddress()
russianAddress()
如果您已扩展 config/realaddress.php
以包含新的国家,则可以使用以下方式生成其地址
$address = $faker->realAddress('Brazil') # From any of the defined cities $address = $faker->realAddress('Brazil', 'Rio de Janiero'); # For Rio de Janiero only $address = $faker->realAddresss('Brazil', ['Rio de Janiero', 'Salvador']) # Multiple cities
使用外观
使用外观允许您在运行时生成真实世界的地址,并允许一次生成多个地址。下面的代码示例展示了 RealAddress 外观的典型用法
use Nonsapiens\RealAddressFactory\RealAddressFactory; . . . $johannesburgAddresses = RealAddress::makeSouthAfrica(20, 'Johannesburg'); # 20 addresses for Johannesburg, South Africa $frenchAddress = RealAddress::makeFrance(1); # A single address for France $brazilAddresses = RealAddress::make(10, 'Brazil'); # 10 addresses for the custom country of Brazil
使用 RealAddress 类
功能上与上面提到的外观提供的相同方法
use Nonsapiens\RealAddressFactory\RealAddressFactory; $f = new RealAddressFactory(); $southAfricanPoints = $f->makeSouthAfrica(4); # Generates 4 locations within South Africa's major cities $capeTownPoints = $f->makeSouthAfrica(2, 'Cape Town'); # Generates 2 locations from Cape Town, South Africa $multiPoints = $f->makeSouthAfrica(3, ['Pretoria', 'Johannesburg']);
添加新的国家或城市
以下示例展示了如何扩展 config/realaddress.php
数组以包含肯尼亚和两个城市
'kenya' => [ 'cities' => [ 'Nairobi', 'Mombasa' ], ],
请注意,此处定义的城市必须能够被谷歌地图识别,并且最好使用其英语变体拼写。
警告
过度使用此工厂可能会导致谷歌阻止您的密钥。过度使用也可能引起 GCP API 费用,具体取决于谷歌地点 API 费用结构。为了防止这种情况,内置了速率限制器,它会阻止过多地向谷歌 API 发送调用。此值可以在 config/realaddress.php
配置文件中进行配置
关于作者
Stuart Steedman 是 YONDER 的首席技术官,YONDER 是一家位于布莱恩斯顿的 GroupM/WPP 南非数字媒体代理机构。他在 PHP 和 Laravel 开发方面有专长,并在技术和开发相关的会议上发表演讲。
Jonathan Maurer 是 YONDER 的资深开发者,YONDER 是一家位于比勒陀利亚的 GroupM/WPP 南非数字媒体代理机构。他专注于 PHP 和 Laravel 开发。