woodsandwalker/laravel-countries

Laravel Countries is a bundle for Laravel providing ISO 3166_2 codes for all countries along with a country model, cast and validation rule.
13,717 10
Install
composer require woodsandwalker/laravel-countries
Latest Version:1.5.0
PHP:^8.0|^8.1|^8.2|^8.3
Laravel:6 – 12
License:MIT
Last Updated:Feb 25, 2025
Links: GitHub  ·  Packagist
Maintainer: james_walker

Laravel Countries

Packagist Downloads Packagist Version

Laravel Countries is a bundle for Laravel providing ISO 3166_2 codes for all countries along with a country model, cast and validation rule.

Getting Stated

Installation

composer require woodsandwalker/laravel-countries

Configuration

There is minimal config and the package can be used without any configuration. The only configuration option is an array of countries to exclude. This works by applying a global scope on the Country model.

To publish the configuration you can run this command:

php artisan vendor:publish --tag=countries-config

To exclude a country simply add its ISO code to the exclude array:

[
    'exclude' => ['GB']
]

Model

The package contains a calebporzio/sushi model which contains the iso_code and name for each country. Using this type of model also means there is no database migration required.

This model can be used like any other Laravel model.

$countryName = \WW\Countries\Models\Country::whereIsoCode('GB')->first()->name; // United Kingdom

Validation Rule

The package contains a validation rule which validates the ISO code.

$data = $request->validate([
    'country' => ['required', new \WW\Countries\Rules\Country]
]);

You can override the default validation error message using the validation.country key in your lang files.

Model Attribute Cast

The package contains a model attribute cast. The cast expects the ISO code as the original attribute.

You can use the following migration to add a country column to the users table.

Schema::table('users', function (Blueprint  $table) {
    $table->char('country', 2);
});

Then add the cast to the user model:

class User extends Model
{
    /**
     * The attributes that should be cast.
     * 
     * @var array
     */
    protected $casts = [
        'country' => \WW\Countries\Casts\Country::class,
    ];
}

Store a country against a user:

$user = User::find(1);

$user->country = 'GB';
$user->save();

You can now access the ISO code and the name on the country attribute on the user model:

$user = User::find(1);

$countryIsoCode = $user->country->iso_code; // GB
$countryName = $user->country->name; // United Kingdom

Localization

When accessing a country name the model will look for a translation string of countries.{ISO_CODE}, for example, countries.GB. If this translation string cannot be found it will fallback to the en locale.

Installing New Locales

A command is included with the package to install new country locales from umpirsky/country-list. You can view all the available locales here. This command will create a new file in lang/{locale}/countries.php. This command uses the file_get_contents function which requires allow_url_fopen to be on in your PHP config.

To install a new locale, for example Spanish (es), run the command:

php artisan countries:install-translation es

License

Laravel Countries is released under the MIT License. See the bundled LICENSE.md file for details.

Related Packages

monarobase/country-list

List of all countries with names and ISO 3166-1 codes in all languages and data...

3,126,412 275
lykegenes/laravel-countries

Get informations about countries.

27,278 7
opheus2/laravel-countries

Get informations about countries and their currency.

10,059 0
vinelab/country

Country names and abbreviations

3,097 2
angelkurten/countries

Countries for Laravel in Spanish and English

2,860 2

Version History

Version Released PHP Laravel License
1.5.0 ^8.0|^8.1|^8.2|^8.3 ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0 MIT
1.4.0 ^8.0|^8.1|^8.2|^8.3 ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0 MIT
1.3.0 ^8.0|^8.1|^8.2 ^6.0|^7.0|^8.0|^9.0|^10.0 MIT
1.2.0 ^8.0|^8.1 ^6.0|^7.0|^8.0|^9.0 MIT
1.1.0 ^8.0|^8.1 ^9.0 MIT