Este pacote contém todo tipo de informações sobre países:
informações | Unid |
---|---|
impostos | 32 |
mapas geométricos | 248 |
mapas de topologia | 248 |
moedas | 256 |
países | 266 |
fusos horários | 423 |
fronteiras | 649 |
bandeiras | 1.570 |
estados | 4.526 |
cidades | 7.376 |
fusos horários | 81.153 |
Entre muitas outras informações você poderá traçar mapas de países:
Use o Composer para instalá-lo:
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 ();
Ambos deveriam retornar
€1
Sobrecarregando a configuração padrão:
use PragmaRX Countries Package Services Config ;
$ countries = new Countries ( new Config ([
' hydrate ' => [
' elements ' => [
' currencies ' => true ,
' flag ' => true ,
' timezones ' => true ,
],
],
]));
Este pacote não está vinculado ao Laravel e não requer instalação (temos uma bridge para esse fim), mas possui Laravel Collections em seu núcleo, todos os métodos em Collections estão disponíveis, desta forma você pode fazer coisas como filtrar , mapear, reduzir, pesquisar, classificar, rejeitar e muito mais. Na verdade, ele usa Coollection, que é uma coleção do Laravel com uma sintaxe fluente, permitindo-nos ter acesso às chaves (e valores) do array como propriedades do objeto.
Para obter todos os países na base de dados basta:
use PragmaRX Countries Package Countries ;
$ countries = new Countries ();
$ all = $ countries -> all ();
Para obter um json você:
return $ countries -> toJson ();
Filtrar por chaves e valores:
$ countries -> where ( ' name.common ' , ' Brazil ' );
Encontrará o Brasil pelo seu nome comum, que é um
#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"
]
]
]
Ou alternativamente você pode filtrar assim
$ countries -> whereNameCommon ( ' Brazil ' );
E você pode ir mais fundo
$ countries -> where ( ' name.native.por.common ' , ' Brasil ' );
Ou pesquise pelo domínio de nível superior do país
$ countries -> where ( ' tld.0 ' , ' .ch ' );
Obter
"name" => array:3 [▼
"common" => "Switzerland"
"official" => "Swiss Confederation"
"native" => array:4 [▶]
]
"tld" => array:1 [▼
0 => ".ch"
]
E use coisas como arrancar
$ countries -> where ( ' cca3 ' , ' USA ' )-> first ()-> hydrateStates ()-> states -> pluck ( ' name ' , ' postal ' )-> toArray ();
Obter
" MA " => " Massachusetts "
" MN " => " Minnesota "
" MT " => " Montana "
" ND " => " North Dakota "
. . .
O pacote usa uma coleção modificada que permite acessar propriedades e métodos como objetos:
$ countries -> where ( ' cca3 ' , ' FRA ' )
-> first ()
-> borders
-> first ()
-> name
-> official ;
Deveria dar
Principality of Andorra
A hidratação das bordas está desativada por padrão, mas você pode hidratá-las facilmente chamando o método de hidratação:
$ countries -> where ( ' name.common ' , ' United Kingdom ' )
-> hydrate ( ' borders ' )
-> first ()
-> borders
-> reverse ()
-> first ()
-> name
-> common ;
Deveria retornar
Ireland
Para melhorar o desempenho, a hidratação, que vem habilitada por padrão, pode ser desabilitada na maioria das propriedades rurais, e é assim que você hidrata manualmente as propriedades:
$ 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 ;
Essas são algumas das propriedades hidratáveis:
Algumas propriedades são armazenadas de forma diferente e, portanto, precisamos de regras especiais para acessá-las, essas propriedades são
ISO639_3
=> O código de idioma de 3 letras.ISO4217
=> O código da moeda de 3 letras.É claro que você pode acessá-los como outras propriedades
$ countries -> whereISO639_3 ( ' por ' )-> count ();
$ countries -> where ( ' ISO639_3 ' , ' por ' )-> count ();
Às vezes você gostaria de acessar uma propriedade com um nome diferente, isso pode ser feito nas configurações, desta forma
' maps ' => [
' lca3 ' => ' ISO639_3 '
]
Aqui vinculamos o formato ISO do código curto de 3 letras do idioma a lca3
, que é a abreviação de language code alpha 3-letter
. Então agora podemos acessar a propriedade por
$ countries -> whereLca3 ( ' por ' );
Ou
$ 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 ();
Deve fornecer 267 (ou mais) países como:
"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 ();
retorna
[
" Aruba " ,
" Afghanistan " ,
" Angola " ,
" Anguilla " ,
" Åland Islands " ,
... .
$ countries -> all ()-> pluck ( ' currencies ' )-> toArray ();
retorna
[
[
" 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 ' );
retorna
[
" AL " : " Alabama " ,
" AK " : " Alaska " ,
" AZ " : " Arizona " ,
" AR " : " Arkansas " ,
" CA " : " California " ,
... .
. . . .
$ countries -> where ( ' cca3 ' , ' FRA ' )
-> first ()
-> hydrate ( ' cities ' )
-> cities
-> paris
-> timezone ;
Deveria retornar
Europe/Paris
$ countries -> where ( ' name.common ' , ' United States ' )-> first ()-> currencies ;
retorna
[{
" alternativeSigns " : [],
" ISO4217Code ": " USD ",
"ISO4217Number": " 840 ",
"sign": " $ " ,
" subunits " : 100 ,
" title ": " U.S. dollar",
....
$ countries -> currencies ();
retorna
[
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 ;
retorna
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 ;
retorna
" 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 "
]
]
Os países fornecem muitas fontes de bandeiras diferentes, incluindo bandeiras SVG. É assim que você usa uma das fontes disponíveis:
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 !!}
Você pode publicar a configuração fazendo:
php artisan vendor:publish --provider=PragmaRX\Countries\ServiceProvider
Este pacote usa alguns outros pacotes de código aberto e, até que não construamos uma documentação melhor, você pode encontrar mais informações sobre dados em mledoze/países e como usá-los neste fantástico artigo do Laravel News.
Por favor, verifique a seção de direitos autorais para obter uma lista completa dos pacotes usados por este.
Nenhum arquivo de dados (JSON, imagens, ícones...) neste projeto pode ser atualizado manualmente. Fecharemos todas as solicitações pull que exigem atualizações manuais para esses arquivos, pois o script de atualização os excluirá de qualquer maneira.
Se você encontrar algo errado com os dados, por favor, peça aos gerenciadores de pacotes (fontes de dados listadas e na seção de direitos autorais) para corrigi-los, e então você mesmo poderá executar o script de atualização para atualizá-los adequadamente neste repositório.
Este pacote vem com o script update.php
, que você DEVE usar para atualizar os arquivos de dados. Ele baixará todas as informações de todos os pacotes e construirá automaticamente o .json
(e alguns outros como .svg
também). É assim que você faz:
cd vendor/pragmarx/countries
composer install
php update.php
E espere muito tempo * (às vezes parece que está travado, mas não está) até terminar de reconstruir tudo, então é só uma questão de preparar, confirmar, enviar todos os arquivos regenerados e redigir um novo PR.
Como esses dados não devem ser alterados, as chamadas são automaticamente armazenadas em cache. Se quiser alterar esse comportamento, você pode editar o arquivo config/countries.php
assim que for publicado.
Antonio Carlos Ribeiro Todos os colaboradores
Para construir o banco de dados e as relações dos países, este pacote faz uso dessas fontes e pacotes:
Os países estão licenciados sob a licença BSD de 3 cláusulas - consulte o arquivo LICENSE
para obter detalhes
Solicitações pull e problemas são mais que bem-vindos.