Installation
composer require monarobase/country-list
No additional configuration is required—just autoload the package.
First Use Case: Fetching Countries in English
use MonaroBase\CountryList\Facades\CountryList;
$countries = CountryList::getCountries('en');
// Returns an array of all countries with ISO codes and names in English
Where to Look First
CountryList provides a clean interface for common operations.CountryList::getCountries(), CountryList::getCountry(), and CountryList::getCountryByCode().CountryList::getCountries('en', 'json').Fetching Countries in Multiple Languages
$languages = ['en', 'es', 'fr'];
$countries = collect($languages)->map(fn($lang) => CountryList::getCountries($lang));
Integrating with Forms/Validation
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'country_code' => 'required|country_code',
]);
// Requires custom rule: `CountryCodeRule` (see below)
Custom Rule for Country Code Validation
use MonaroBase\CountryList\Rules\CountryCode;
$validator = Validator::make($request->all(), [
'country_code' => ['required', new CountryCode],
]);
Caching for Performance
$cachedCountries = Cache::remember('countries_en', now()->addHours(1), function () {
return CountryList::getCountries('en');
});
Blade Directives for Views
// In a service provider:
Blade::directive('country', function ($code) {
return "<?php echo \\MonaroBase\\CountryList\\Facades\\CountryList::getCountryName('{$code}', app()->getLocale()); ?>";
});
// In Blade:
@country('US') // Outputs "United States" (or localized equivalent)
Exporting Data to CSV/Excel
use Maatwebsite\Excel\Facades\Excel;
Excel::download(new CountriesExport('en'), 'countries.csv');
(Requires maatwebsite/excel and a custom CountriesExport class.)
Locale Fallback
en. Always validate available languages with:
CountryList::getAvailableLanguages(); // Returns array of supported locales
Case Sensitivity in ISO Codes
US, us) are case-insensitive in the package, but always use uppercase for consistency:
CountryList::getCountry('US'); // Correct
CountryList::getCountry('us'); // Works but discouraged
Memory Usage for Large Exports
$countries = CountryList::getCountries('en', 'json', ['chunk' => 1000]);
Deprecated Methods
CountryList::all() (deprecated in favor of CountryList::getCountries()).Verify Data Integrity
$invalidCodes = CountryList::getCountries('en')->filter(fn($country) => empty($country['name']));
Logging Unsupported Languages
try {
$countries = CountryList::getCountries('xx'); // Hypothetical unsupported lang
} catch (\InvalidArgumentException $e) {
Log::warning("Unsupported language: xx", ['exception' => $e]);
}
Testing Edge Cases
CountryList::getCountry('ZZ')).CountryList::getCountries('')).Custom Data Formats
CountryList::extend('custom', function ($countries, $lang) {
return collect($countries)->map(fn($c) => [
'code' => $c['code'],
'name' => strtoupper($c['name']),
]);
});
// Usage: CountryList::getCountries('en', 'custom')
Adding New Languages
languages array in CountryListServiceProvider.Integration with Eloquent
country_code trait to models:
use MonaroBase\CountryList\Traits\HasCountryCode;
class User extends Model {
use HasCountryCode;
}
// Automatically validates and localizes country codes
API Response Wrapping
return response()->json([
'data' => CountryList::getCountries('en'),
'meta' => ['count' => count(CountryList::getCountries('en'))],
]);
How can I help you explore Laravel packages today?