mrpunyapal / client-validation-filament
Filament integration for Laravel Client Validation: native-field macros, render-time x-validate attributes, and custom validation messages/attributes forwarded to the browser.
Package info
github.com/MrPunyapal/client-validation-filament
pkg:composer/mrpunyapal/client-validation-filament
Requires
- php: ^8.3
- filament/filament: ^5.0
- mrpunyapal/laravel-client-validation: ^0.1.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- orchestra/testbench: ^10.0|^11.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
README
Filament integration for Laravel Client Validation. It ships the ClientValidationPlugin for Filament panels, the clientValidation() / withoutClientValidation() macros on native fields (TextInput, Select, ...), and the HasClientValidation trait / ClientValidatedField wrapper for custom components.
The plugin resolves validation rules at render time, injects x-validate attributes (plus a name attribute with the field's state path, which Filament v5 inputs otherwise render without), and forwards evaluated validationMessages() / validationAttribute() values so the browser shows the same messages Laravel would.
Installation
composer require mrpunyapal/client-validation-filament
Usage
Register the plugin on any Filament panel:
use MrPunyapal\ClientValidation\Filament\ClientValidationPlugin; class AdminPanelProvider extends PanelProvider { public function panel(Panel $panel): Panel { return $panel ->plugins([ ClientValidationPlugin::make(), ]); } }
Then attach client-side rules to any native field:
TextInput::make('email') ->required() ->email() ->clientValidation();
clientValidation() with no rules derives the client-side rules from the field's own required state and validation rules (server-only rules such as unique or exists are filtered out). Custom messages and attributes are shared with the server:
TextInput::make('email') ->required() ->email() ->validationAttribute('email address') ->validationMessages([ 'required' => 'Please provide your :attribute.', 'email' => 'Please provide a valid :attribute.', ]) ->clientValidation();
Testing
composer install
composer test