woodsandwalker / laravel-countries
Laravel Countries 是一个为 Laravel 提供所有国家的 ISO 3166_2 代码、国家模型、类型转换和验证规则的扩展包。
Requires
- php: ^8.0|^8.1|^8.2|^8.3
- calebporzio/sushi: ^2.5
- illuminate/database: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
README
Laravel Countries 是一个为 Laravel 提供所有国家的 ISO 3166_2 代码、国家模型、类型转换和验证规则的扩展包。
入门指南
安装
composer require woodsandwalker/laravel-countries
配置
配置最少,无需配置即可使用该包。唯一的配置选项是排除国家数组。这通过在 Country 模型上应用全局范围来实现。
要发布配置,您可以运行以下命令
php artisan vendor:publish --tag=countries-config
要排除一个国家,只需将其 ISO 代码添加到排除数组中
[
'exclude' => ['GB']
]
模型
该包包含一个 calebporzio/sushi 模型,其中包含每个国家的 iso_code 和 name。使用此类模型还意味着无需数据库迁移。
此模型可以像任何其他 Laravel 模型一样使用。
$countryName = \WW\Countries\Models\Country::whereIsoCode('GB')->first()->name; // United Kingdom
验证规则
该包包含一个验证规则,用于验证 ISO 代码。
$data = $request->validate([ 'country' => ['required', new \WW\Countries\Rules\Country] ]);
您可以使用 validation.country 键在您的语言文件中覆盖默认验证错误消息。
模型属性转换
该包包含一个模型属性转换。转换期望 ISO 代码作为原始属性。
您可以使用以下迁移向用户表添加国家列。
Schema::table('users', function (Blueprint $table) { $table->char('country', 2); });
然后将转换添加到用户模型
class User extends Model { /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'country' => \WW\Countries\Casts\Country::class, ]; }
为用户存储国家
$user = User::find(1); $user->country = 'GB'; $user->save();
现在您可以在用户模型的国家属性上访问 ISO 代码和名称
$user = User::find(1); $countryIsoCode = $user->country->iso_code; // GB $countryName = $user->country->name; // United Kingdom
本地化
当访问国家名称时,模型将查找 countries.{ISO_CODE} 的翻译字符串,例如 countries.GB。如果找不到此翻译字符串,它将回退到 en 区域。
安装新区域
该包包含一个命令,可以从 umpirsky/country-list 安装新的国家区域。您可以在此处查看所有可用的区域。此命令将在 lang/{locale}/countries.php 中创建一个新文件。此命令使用 file_get_contents 函数,需要在您的 PHP 配置中开启 allow_url_fopen。
要安装新区域,例如西班牙语(es),请运行以下命令
php artisan countries:install-translation es
许可证
Laravel Countries 在 MIT 许可证下发布。有关详细信息,请参阅附带 LICENSE.md 文件。