Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Spanish Validator Laravel Package

danielmrdev/laravel-spanish-validator

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require danielmrdev/laravel-spanish-validator
    

    Publish the config file (if needed):

    php artisan vendor:publish --provider="DanielMRDev\SpanishValidator\SpanishValidatorServiceProvider"
    
  2. First Use Case: Validate a NIF in a Laravel request:

    use DanielMRDev\SpanishValidator\Rules\Nif;
    
    $request->validate([
        'nif' => ['required', new Nif],
    ]);
    
  3. Key Files:

    • config/spanish-validator.php (customization)
    • vendor/danielmrdev/laravel-spanish-validator/src/Rules/ (rule implementations)

Implementation Patterns

Core Validation Workflows

  1. Form Request Validation:

    use DanielMRDev\SpanishValidator\Rules\{Nif, Nie, Cif, Nss, Ibans, PostalCode, Phone};
    
    public function rules()
    {
        return [
            'tax_id' => ['required', new Nif],
            'foreign_id' => ['required', new Nie],
            'company_id' => ['required', new Cif],
            'ssn' => ['required', new Nss],
            'iban' => ['required', new Ibans],
            'postal_code' => ['required', new PostalCode],
            'phone' => ['required', new Phone],
        ];
    }
    
  2. Dynamic Rule Application:

    $validator = Validator::make($data, [
        'id' => function ($attribute, $value, $fail) {
            if (str_starts_with($value, 'X')) {
                return new Nie;
            }
            return new Nif;
        }
    ]);
    
  3. Custom Error Messages:

    $request->validate([
        'nif' => ['required', new Nif],
    ], [
        'nif.nif' => 'El NIF :attribute no es válido. Ejemplo: 12345678A',
    ]);
    

Integration Tips

  • API Responses: Use ->failedValidation() in controllers to return consistent error formats.
  • Model Validation: Attach rules to Eloquent models:
    use DanielMRDev\SpanishValidator\Rules\Nif;
    
    protected $rules = [
        'nif' => ['required', new Nif],
    ];
    
  • Batch Processing: Validate arrays of IDs:
    $validator = Validator::make($request->all(), [
        'nifs.*' => [new Nif],
    ]);
    

Gotchas and Tips

Common Pitfalls

  1. Case Sensitivity:

    • NIF/NIE letters (e.g., A vs a) are case-sensitive in validation. Normalize input:
      $nif = strtoupper($request->nif);
      
  2. CIF Validation Quirks:

    • CIFs for companies start with letters A-J (except I). The validator may reject K-Z by default. Override in config:
      'cif' => [
          'allowed_first_letters' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
      ],
      
  3. Phone Number Edge Cases:

    • Spanish numbers can include +34, 0034, or 34 prefixes. Normalize before validation:
      $phone = preg_replace('/[^0-9]/', '', $request->phone);
      
  4. IBAN Validation:

    • Requires ext-intl PHP extension. If missing, install:
      pecl install intl
      

Debugging Tips

  • Custom Rules: Extend existing rules for complex logic:

    use DanielMRDev\SpanishValidator\Rules\Nif as BaseNif;
    
    class CustomNif extends BaseNif {
        public function passes($attribute, $value) {
            if ($value === 'EXEMPT') return true;
            return parent::passes($attribute, $value);
        }
    }
    
  • Logging Failures:

    $validator = Validator::make($data, ['nif' => [new Nif]]);
    if ($validator->fails()) {
        \Log::error('Validation failed for NIF: ' . $validator->errors()->first('nif'));
    }
    

Extension Points

  1. Add Custom Rules: Create a new rule class extending DanielMRDev\SpanishValidator\Rules\BaseRule and register it in the service provider.

  2. Override Default Config: Publish and modify config/spanish-validator.php to adjust:

    • Allowed characters (e.g., nif_letters).
    • Strictness of phone/IBAN validation.
  3. Localization: Extend error messages in language files (resources/lang/{locale}/validation.php):

    'nif' => [
        'nif' => 'El NIF :attribute no es válido. Formato: 8 dígitos + letra (ej. 12345678A).',
    ],
    
  4. Testing: Use the package’s test cases as a reference:

    $this->assertTrue((new Nif)->passes('nif', '12345678A'));
    $this->assertFalse((new Nif)->passes('nif', '12345678'));
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope