hsalem7 / countries
Requires
- php: >=7.0
- colinodell/json5: ^1.0|^2.0
- nette/caching: ^2.5|^3.0
- nette/robot-loader: ^4.0
- nette/utils: ^4.0
- pragmarx/coollection: >=0.8
- psr/simple-cache: ^3.0
Requires (Dev)
- gasparesganga/php-shapefile: ^3.4
- phpunit/phpunit: ~6.0|~7.0|~8.0|^9.0
- squizlabs/php_codesniffer: ^2.3|^3.6
This package is auto-updated.
Last update: 2024-09-11 15:13:26 UTC
README
Countries. 这是对pragmarx原始包的分支,但已修复以支持Laravel 10,直到原始包的所有者修复它。
它为您提供了什么?
此包包含有关国家的大量信息
地质和拓扑地图
在许多其他信息中,您还可以绘制国家地图
要求
- PHP 7.0+
安装
使用Composer安装它
composer require hsalem7/countries
实例化
use PragmaRX\Countries\Package\Countries; $countries = new Countries(); echo $countries->where('cca2', 'IT')->first()->hydrateCurrencies()->currencies->EUR->coins->frequent->first(); // or calling it statically echo Countries::where('cca2', 'IT')->first()->hydrateCurrencies()->currencies->EUR->coins->frequent->first();
都应该返回
€1
覆盖默认配置
use PragmaRX\Countries\Package\Services\Config; $countries = new Countries(new Config([ 'hydrate' => [ 'elements' => [ 'currencies' => true, 'flag' => true, 'timezones' => true, ], ], ]));
使用方法
此包与Laravel无关,也不需要安装Laravel(我们为此目的有一个桥梁),但它在其核心中具有Laravel Collections,Collections中的所有方法都可用,这样您就可以执行过滤、映射、归约、搜索、排序、拒绝等操作。实际上,它使用了Coollection,这是一个具有流畅语法的Laravel Collections,允许我们以对象属性的形式访问数组键(和值)。
要获取数据库中的所有国家,只需这样做
use PragmaRX\Countries\Package\Countries; $countries = new Countries(); $all = $countries->all();
要获取JSON,这样做
return $countries->toJson();
通过键和值进行筛选
$countries->where('name.common', 'Brazil');
您将能够通过其常用名称找到巴西,这是一个
#items: array:22 [▼
"name" => array:3 [▼
"common" => "Brazil"
"official" => "Federative Republic of Brazil"
"native" => array:1 [▼
"por" => array:2 [▼
"official" => "República Federativa do Brasil"
"common" => "Brasil"
]
]
]
或者您也可以这样过滤
$countries->whereNameCommon('Brazil');
并且您可以更深入地了解
$countries->where('name.native.por.common', 'Brasil');
或者通过国家顶级域名进行搜索
$countries->where('tld.0', '.ch');
以获取
"name" => array:3 [▼
"common" => "Switzerland"
"official" => "Swiss Confederation"
"native" => array:4 [▶]
]
"tld" => array:1 [▼
0 => ".ch"
]
并使用诸如pluck之类的功能
$countries->where('cca3', 'USA')->first()->hydrateStates()->states->pluck('name', 'postal')->toArray();
以获取
"MA" => "Massachusetts" "MN" => "Minnesota" "MT" => "Montana" "ND" => "North Dakota" ...
此包使用了一个修改后的Collection,允许您以对象的方式访问属性和方法
$countries->where('cca3', 'FRA') ->first() ->borders ->first() ->name ->official;
应该给出
Principality of Andorra
默认禁用边界的激活,但您可以通过调用hydrate方法轻松地激活边界
$countries->where('name.common', 'United Kingdom') ->hydrate('borders') ->first() ->borders ->reverse() ->first() ->name ->common;
应该返回
Ireland
激活
为了提高性能,默认启用的激活可以在大多数国家属性上禁用,这是您手动激活属性的方法
$countries->where('name.common', 'United States')->first()->hydrate('timezones')->timezones->first()->zone_name; $countries->where('name.common', 'United States')->first()->hydrate('timezones')->timezones->first()->zone_name;
这些是一些可激活的属性
- 边界
- 城市
- 货币
- 旗帜
- 几何
- 语言
- 州
- 税收
- 时区
- 拓扑
额外的WHERE规则
一些属性存储方式不同,因此我们需要特殊的规则来访问它们,这些属性是
ISO639_3
=> 3位语言代码。ISO4217
=> 3位货币代码。
您当然可以像访问其他属性一样访问它们
$countries->whereISO639_3('por')->count(); $countries->where('ISO639_3', 'por')->count();
映射
有时您可能希望通过不同的名称访问一个属性,这可以在设置中完成,这样
'maps' => [ 'lca3' => 'ISO639_3' ]
在这里,我们将ISO格式的3位语言代码绑定到lca3
,它是language code alpha 3-letter
的缩写。因此,现在我们可以通过以下方式访问属性
$countries->whereLca3('por');
或
$countries->where('lca3', 'por');
以下是一些来自Laravel News和其他贡献者的示例
生成带有代码、本地名称和常用名称的所有国家的列表
app(PragmaRX\Countries\Package\Countries::class) ->all() ->map(function ($country) { $commonName = $country->name->common; $languages = $country->languages ?? collect(); $language = $languages->keys()->first() ?? null; $nativeNames = $country->name->native ?? null; if ( filled($language) && filled($nativeNames) && filled($nativeNames[$language]) ?? null ) { $native = $nativeNames[$language]['common'] ?? null; } if (blank($native ?? null) && filled($nativeNames)) { $native = $nativeNames->first()['common'] ?? null; } $native = $native ?? $commonName; if ($native !== $commonName && filled($native)) { $native = "$native ($commonName)"; } return [$country->cca2 => $native]; }) ->values() ->toArray();
应给出大约267个国家,如下所示
"AW" => "Aruba"
"AF" => "افغانستان (Afghanistan)"
"AO" => "Angola"
"AI" => "Anguilla"
"AX" => "Åland (Åland Islands)"
"AL" => "Shqipëria (Albania)"
"AD" => "Andorra"
"AE" => "دولة الإمارات العربية المتحدة (United Arab Emirates)"
"AR" => "Argentina"
"AM" => "Հայաստան (Armenia)"
"AS" => "American Samoa"
"AQ" => "Antarctica"
"TF" => "Terres australes et antarctiques françaises (French Southern and Antarctic Lands)"
"AG" => "Antigua and Barbuda"
"AU" => "Australia"
"AT" => "Österreich (Austria)"
"AZ" => "Azərbaycan (Azerbaijan)"
"BI" => "Burundi"
"BE" => "Belgien (Belgium)"
"BJ" => "Bénin (Benin)"
"BF" => "Burkina Faso"
"BD" => "বাংলাদেশ (Bangladesh)"
"BG" => "България (Bulgaria)"
"BH" => "البحرين (Bahrain)"
"BS" => "Bahamas"
"BA" => "Bosna i Hercegovina (Bosnia and Herzegovina)"
"BL" => "Saint-Barthélemy (Saint Barthélemy)"
"SH" => "Saint Helena, Ascension and Tristan da Cunha"
"BY" => "Белару́сь (Belarus)"
"BZ" => "Belize"
"BM" => "Bermuda"
"BO" => "Wuliwya (Bolivia)"
"BQ" => "Caribisch Nederland (Caribbean Netherlands)"
"BR" => "Brasil (Brazil)"
"BB" => "Barbados"
"BN" => "Negara Brunei Darussalam (Brunei)"
"BT" => "འབྲུག་ཡུལ་ (Bhutan)"
"BV" => "Bouvetøya (Bouvet Island)"
"BW" => "Botswana"
"CF" => "République centrafricaine (Central African Republic)"
"CA" => "Canada"
"CC" => "Cocos (Keeling) Islands"
"CH" => "Suisse (Switzerland)"
"CL" => "Chile"
"CN" => "中国 (China)"
"CI" => "Côte d'Ivoire (Ivory Coast)"
"CM" => "Cameroon"
"CD" => "RD Congo (DR Congo)"
"CG" => "République du Congo (Republic of the Congo)"
"CK" => "Cook Islands"
"CO" => "Colombia"
"KM" => "القمر (Comoros)"
"CV" => "Cabo Verde (Cape Verde)"
...
生成国家的列表
$countries->all()->pluck('name.common')->toArray();
返回
[ "Aruba", "Afghanistan", "Angola", "Anguilla", "Åland Islands", ....
生成货币列表
$countries->all()->pluck('currencies')->toArray();
返回
[ [ "AWG", ], [ "AFN", ], [ "AOA", ], [ "XCD", ], [ "EUR", ], ....
获取货币符号
$countries->where('name.common', 'Brazil')->first()->hydrate('currencies')->currencies->BRL->units->major->symbol;
生成州列表
$countries->where('name.common', 'United States') ->first() ->hydrateStates() ->states ->sortBy('name') ->pluck('name', 'postal');
返回
[ "AL": "Alabama", "AK": "Alaska", "AZ": "Arizona", "AR": "Arkansas", "CA": "California", .... ....
激活并获取城市
$countries->where('cca3', 'FRA') ->first() ->hydrate('cities') ->cities ->paris ->timezone;
应该返回
Europe/Paris
获取国家的货币
$countries->where('name.common', 'United States')->first()->currencies;
返回
[{ "alternativeSigns": [], "ISO4217Code": "USD", "ISO4217Number": "840", "sign": "$", "subunits": 100, "title": "U.S. dollar", ....
获取所有货币
$countries->currencies();
返回
[ 0 => "AED" 1 => "AFN" 2 => "ALL" 3 => "AMD" 4 => "ANG" 5 => "AOA" 6 => "ARS" 7 => "AUD" 8 => "AWG" 9 => "AZN" 10 => "BAM" ....
获取州的时区
return $countries->where('name.common', 'United States')->first()->timezone->NC;
返回
America/New_York
获取一个国家所有时区
$countries->where('name.common', 'Brazil') ->first() ->hydrateTimezones() ->timezones ->map(function ($timezone) { return $timezone->zone_name; })->values() ->unique() ->toArray();
获取时区所有时间
return $countries->where('name.common', 'United States Virgin Islands')->first()->hydrate('timezones_times')->timezones->first()->times;
返回
"times" => [ "abbreviation" => "LMT" "dst" => "0" "gmt_offset" => "-14764" "time_start" => "-1825098837" "zone_id" => "415" 1 => [ "abbreviation" => "AST" "dst" => "0" "gmt_offset" => "-14400" "time_start" => "-1825098836" "zone_id" => "415" ] ]
旗帜
国家提供多种旗帜来源,包括SVG旗帜。这是如何使用可用来源之一的方法
安装 flag-icon
npm install --save-dev flag-icon-css
将其导入到您的项目中
@import '~flag-icon-css/sass/flag-icon.scss';
使用国家获取旗帜span
$unitedStatesFlag =
$this->countries->where('cca3', 'USA')
->first()
->flag
->flag_icon;
在blade模板中渲染它
{!! $unitedStatesFlag !!}
发布资源
您可以通过以下操作发布配置
php artisan vendor:publish --provider=PragmaRX\\Countries\\ServiceProvider
数据
来源
此包使用一些其他开源包,直到我们构建更好的文档,您可以在 mledoze/countries 上找到有关数据的更多信息,以及如何在 Laravel News 文章 中使用它。
请检查 版权 部分,以获取该包使用的完整包列表。
更新
警告
此项目中的所有数据文件(JSON、图像、图标等)都不能手动更新。 我们将关闭所有要求手动更新这些文件的拉取请求,因为更新脚本无论如何都会删除它们。
如果您发现数据有问题,请,您必须要求包管理者(列出的数据源和版权部分)修复它们,然后您自己可以运行更新脚本来正确更新此存储库中的它们。
update.php
此包附带 update.php
脚本,您必须使用它来更新数据文件。它将从所有包中下载所有信息并自动构建 .json
(以及一些其他如 .svg
)文件。这是您要这样做的方式
cd vendor/hsalem7/countries
composer install
php update.php
并等待 非常长的时间*(有时看起来好像卡住了,但并不是)直到它完成重建一切,然后只是阶段、提交、推送所有重新生成的文件,并草拟一个新的PR。
缓存
由于此数据不应该更改,调用会自动缓存。如果您想更改此行为,可以在发布后编辑 config/countries.php
文件。
框架桥接
示例文件
- sample-partial.json:没有边界的国家示例。
- sample-full.json:完整的国家示例。
作者
版权
构建国家数据库和关系,此包使用以下来源和包
许可证
Countries 采用 BSD 3-Clause 许可证授权 - 有关详细信息,请参阅 LICENSE
文件
贡献
欢迎提交拉取请求和问题。