该包包含有关国家/地区的各种信息:
信息 | 项目 |
---|---|
税收 | 32 |
几何图 | 248 |
拓扑图 | 248 |
货币 | 256 |
国家 | 266 |
时区 | 第423章 |
边界 | 第649章 |
旗帜 | 1,570 |
州 | 4,526 |
城市 | 7,376 |
时区时间 | 81,153 |
在许多其他信息中,您将能够绘制国家地图:
使用 Composer 来安装它:
composer require pragmarx/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 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"
]
并使用诸如拔毛之类的东西
$ 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
默认情况下,边框水合是禁用的,但是您可以通过调用 Hydro 方法轻松地使边框水合:
$ 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 ;
这些是一些保湿特性:
有些属性的存储方式不同,因此我们需要特殊的规则来访问它们,这些属性是
ISO639_3
=> 3 字母语言代码。ISO4217
=> 3 个字母的货币代码。您当然可以像其他属性一样访问它们
$ countries -> whereISO639_3 ( ' por ' )-> count ();
$ countries -> where ( ' ISO639_3 ' , ' por ' )-> count ();
有时您想通过不同的名称访问属性,这可以在设置中完成,这样
' maps ' => [
' lca3 ' => ' ISO639_3 '
]
这里我们将语言 3 字母短代码 ISO 格式绑定到lca3
,它是language code alpha 3-letter
的缩写。现在我们可以通过以下方式访问该属性
$ countries -> whereLca3 ( ' por ' );
或者
$ countries -> where ( ' lca3 ' , ' por ' );
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 标志。这是使用可用来源之一的方式:
npm install --save-dev flag-icon-css
@import '~flag-icon-css/sass/flag-icon.scss';
$unitedStatesFlag =
$this->countries->where('cca3', 'USA')
->first()
->flag
->flag_icon;
{!! $unitedStatesFlag !!}
您可以通过执行以下操作来发布配置:
php artisan vendor:publish --provider=PragmaRX\Countries\ServiceProvider
这个包使用了一些其他开源包,在我们没有构建更好的文档之前,您可以在这篇精彩的 Laravel 新闻文章中找到有关 mledoze/国家/地区数据以及如何使用它的更多信息。
请检查版权部分以获取该软件包使用的完整列表。
该项目上的数据文件(JSON、图像、图标...)无法手动更新。我们将关闭所有需要手动更新这些文件的拉取请求,因为更新脚本无论如何都会删除它们。
如果您发现数据有问题,请要求包管理器(列出的数据源和版权部分)修复它们,然后您可以自己运行更新脚本以在此存储库上正确更新它们。
该软件包附带update.php
脚本,您必须使用该脚本来更新数据文件。它将下载所有包中的所有信息并自动构建.json
(以及其他一些文件,例如.svg
)。您可以这样做:
cd vendor/pragmarx/countries
composer install
php update.php
并等待很长一段时间*(有时看起来像是卡住了,但事实并非如此)直到完成重建所有内容,然后只需暂存、提交、推送所有重新生成的文件并起草新的 PR 即可。
由于该数据不应更改,因此调用会自动缓存。如果您想更改此行为,可以在发布后编辑config/countries.php
文件。
安东尼奥·卡洛斯·里贝罗 所有贡献者
为了构建国家数据库和关系,该包使用了这些源和包:
国家/地区根据 BSD 3-Clause License 获得许可 - 请参阅LICENSE
文件了解详细信息
拉取请求和问题非常受欢迎。