Filament Smart CEP is a plugin for FilamentPHP v4 that validates Brazilian postal codes (CEP) and automatically fills address fields with accurate data. It uses ViaCEP as the primary API, with multiple backup providers to ensure reliability and uptime.
Compatible with Filament v4.
- CEP validation with instant feedback.
- Automatic address filling: street, neighborhood, city, state, state abbreviation, country, and country abbreviation.
- Multiple API fallback: if ViaCEP is unavailable, the plugin tries alternative providers automatically.
- Seamless FilamentPHP integration β works out-of-the-box with Forms.
- Customizable field mapping to match your resource structure.
- Fast and lightweight β no heavy dependencies.
- User inputs a Brazilian postal code (CEP) in a Filament form.
- The plugin validates the code format.
- The plugin queries ViaCEP first.
- If ViaCEP fails, other APIs are used as fallback.
- Address fields are automatically populated.
You can install the package via composer:
composer require otavio-araujo/filament-smart-cep
You can customize:
- Which fields are auto-filled.
- Which field is going to receive focus after CEP autofill.
- Use prefix ou suffix action.
The custom field searches for CEP and fills up the form fields with the data returned by the web service.
By default, the fields that will be filled up are:
- street;
- neighborhood;
- city;
- state;
- state_code;
- ibge_code;
- country;
- and country_code.
By default, the number field is focused after field-autofill.
public static function configure(Schema $schema): Schema
{
return $schema
->components([
SmartCep::make('postal_code'),
TextInput::make('street'),
TextInput::make('neighborhood'),
TextInput::make('city'),
TextInput::make('state'),
TextInput::make('state_code'),
TextInput::make('ibge_code'),
TextInput::make('country'),
TextInput::make('country_code'),
TextInput::make('number'),
]);
}
If you want to customize the fields that will be filled up, you can chain on the following methods:
public static function configure(Schema $schema): Schema
{
return $schema
->components([
SmartCep::make('postal_code')
->bindStreetField('custom_street')
->bindNeighborhoodField('custom_neighborhood')
->bindCityField('custom_city')
->bindStateField('custom_state')
->bindStateCodeField('custom_state_code')
->bindIbgeCodeField('custom_ibge_code')
->bindCountryField('custom_country')
->bindCountryCodeField('custom_country_code'),
TextInput::make('custom_street'),
TextInput::make('custom_neighborhood'),
TextInput::make('custom_city'),
TextInput::make('custom_state'),
TextInput::make('custom_state_code'),
TextInput::make('custom_ibge_code'),
TextInput::make('custom_country'),
TextInput::make('custom_country_code'),
TextInput::make('number'),
]);
}
If you want to customize the action's button icon and position, you can chain on the following methods:
public static function configure(Schema $schema): Schema
{
return $schema
->components([
SmartCep::make('postal_code')
->actionIcon(Heroicon::OutlinedDocumentMagnifyingGlass), // Default: Heroicon::OutlinedMagnifyingGlass
->actionPosition('prefix') // Options: 'prefix', 'suffix' | Default: 'suffix'
]);
}
If you want to set focus on an input after filling up the fields, you can chain on the following methods:
public static function configure(Schema $schema): Schema
{
return $schema
->components([
SmartCep::make('postal_code')
->nextFocusField('number'),
...
TextInput::make('number'),
]);
}
composer analyse
composer lint
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.