В этом пакете есть всякая информация о странах:
информация | предметы |
---|---|
налоги | 32 |
карты геометрии | 248 |
карты топологии | 248 |
валюты | 256 |
страны | 266 |
часовые пояса | 423 |
границы | 649 |
флаги | 1570 |
государства | 4526 |
города | 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, все методы в коллекциях доступны, таким образом вы можете делать такие вещи, как фильтрация. , картирование, уменьшение, поиск, сортировка, отклонение и многое другое. На самом деле он использует Coollection, который представляет собой коллекции Laravel с гибким синтаксисом, позволяющим нам иметь доступ к ключам (и значениям) массива в качестве свойств объекта.
Чтобы получить все страны в базе данных, вам просто нужно:
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 "
. . .
Пакет использует модифицированную коллекцию, которая позволяет вам получать доступ к свойствам и методам как к объектам:
$ countries -> where ( ' cca3 ' , ' FRA ' )
-> first ()
-> borders
-> first ()
-> name
-> official ;
Должен дать
Principality of Andorra
Гидратация границ отключена по умолчанию, но вы можете легко увлажнить границы, вызвав метод гидрат:
$ 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
=> Трехбуквенный код языка.ISO4217
=> Трехбуквенный код валюты.Конечно, вы можете получить к ним доступ, как и к другим свойствам.
$ countries -> whereISO639_3 ( ' por ' )-> count ();
$ countries -> where ( ' ISO639_3 ' , ' por ' )-> count ();
Иногда вам нужно получить доступ к свойству под другим именем, это можно сделать в настройках, вот так
' maps ' => [
' lca3 ' => ' ISO639_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
Этот пакет использует некоторые другие пакеты с открытым исходным кодом, и, пока мы не создадим лучшую документацию, вы можете найти дополнительную информацию о данных о mledoze/странах и о том, как их использовать, в этой фантастической статье Laravel News.
Пожалуйста, проверьте раздел авторских прав, чтобы увидеть полный список пакетов, используемых в этом пакете.
Никакие файлы данных (JSON, изображения, значки...) в этом проекте не могут быть обновлены вручную. Мы закроем все запросы на включение, требующие ручного обновления этих файлов, которые будут закрыты, поскольку сценарий обновления все равно удалит их.
Если вы обнаружите что-то не так с данными, вам, пожалуйста, придется попросить менеджеров пакетов (указанные источники данных и в разделе об авторских правах) исправить их, а затем вы сами сможете запустить скрипт обновления, чтобы правильно обновить их в этом репозитории.
В этот пакет входит скрипт update.php
, который вы ДОЛЖНЫ использовать для обновления файлов данных. Он загрузит всю информацию из всех пакетов и автоматически создаст .json
(и некоторые другие, например .svg
). Вот как вы это делаете:
cd vendor/pragmarx/countries
composer install
php update.php
И ждать очень долго * (иногда кажется, что зависло, но это не так), пока он закончит все пересобирать, тогда остается только поставить, закоммитить, закинуть все регенерированные файлы и составить новый PR.
Поскольку эти данные не должны меняться, вызовы автоматически кэшируются. Если вы хотите изменить это поведение, вы можете отредактировать файл config/countries.php
после его публикации.
Антонио Карлос Рибейро Все участники
Для создания базы данных стран и связей этот пакет использует следующие источники и пакеты:
Страны лицензируются по лицензии BSD из 3 пунктов — подробности см. в файле LICENSE
Запросы на включение и проблемы более чем приветствуются.