pardalsalcap / linter-locations
Add on to Linter to manage Geolocations
Requires
- php: ^8.2
- filament/filament: ^5.0
- illuminate/contracts: ^11.0|^12.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.0
- nunomaduro/collision: ^8.0
- orchestra/testbench: ^9.13|^10.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
README
pardalsalcap/linter-locations adds a geographic data model and Filament resources for continents, countries, communities, states, cities, and addresses.
It is designed to work as an add-on for Laravel applications that already use Filament.
Compatibility
- PHP
^8.2 - Laravel
^11.0|^12.0 - Filament
^5.0
Installation
Install the package:
composer require pardalsalcap/linter-locations
Publish and run the migrations:
php artisan vendor:publish --tag="linter-locations-migrations"
php artisan migrate
Publish the config file if you want to adjust locales or search behavior:
php artisan vendor:publish --tag="linter-locations-config"
Default config:
return [ 'available_locales' => [ 'ca' => 'CatalĂ ', 'es' => 'Castellano', 'en' => 'English', ], 'use_scoped_search' => true, ];
Install Command
The package ships with an install command:
php artisan linter-locations:install
The command asks for confirmation before each optional step:
- Populate the database with starter geographic data.
- Create the Filament resource wrappers inside your application.
If you confirm the resource step, the command creates these files in app/Filament/Resources when they do not already exist:
ContinentResource.phpCountryResource.phpCommunityResource.phpStateResource.phpCityResource.phpAddressResource.php
The generated classes extend the package resources, so you can start using them immediately and still customize them later in your app.
Filament Resources
The package provides base Filament resources for:
- Continents
- Countries
- Communities
- States
- Cities
- Addresses
The generated wrapper classes are intentionally minimal:
<?php namespace App\Filament\Resources; class ContinentResource extends \Pardalsalcap\LinterLocations\Resources\ContinentResource { }
If you prefer to create them manually, examples are available in resources/stubs.
Database Seeder Data
The install command can preload:
- Continents
- Countries
- Spanish communities
- Spanish states
- Spanish cities
This gives a practical starting point for projects that need location data immediately.
Traits
HasAddresses
Use Pardalsalcap\LinterLocations\Traits\HasAddresses on any Eloquent model that should be linked to addresses.
Example:
use Illuminate\Database\Eloquent\Model; use Pardalsalcap\LinterLocations\Traits\HasAddresses; class User extends Model { use HasAddresses; }
Once applied, the model can attach, detach, and sync addresses through the provided relationship helpers.
Address Relation Manager
The package also includes AddressableRelationManager, which can be attached to your own Filament resources when the model uses HasAddresses.
Example:
<?php namespace App\Filament\Resources; use Filament\Resources\Resource; use Pardalsalcap\LinterLocations\Resources\AddressResource\RelationManagers\AddressableRelationManager; class UserResource extends Resource { public static function getRelations(): array { return [ AddressableRelationManager::class, ]; } }
Translations
You can publish the translation files with:
php artisan vendor:publish --tag="linter-locations-translations"
Published translations will be available under:
resources/lang/vendor/linter-locations
The package currently includes translation files for English and Spanish.
Credits
License
The MIT License (MIT). See LICENSE.md.