Laravel validacija podataka se poboljšava sa prilagođenim pravilima

laravel validacija podataka

U razvoju softverskih projekata, pravila validacije podataka su osnovni korak koji osigurava ispravnost ulaznih podataka.

Međutim, često se nađemo u radu s alatima ili u scenarijima u kojima integrirana pravila validacije nisu dovoljna.

Laravelov sistem za validaciju podataka ima skup osnovnih pravila, koja se mogu obogatiti prilagođenim pravilima, koja nam omogućavaju da kreiramo višekratnu i testiranu logiku validacije za naše aplikacije.

Pogledajmo u ovom članku kako kreirati i koristiti prilagođena pravila za provjeru valjanosti podataka u Laravelu.

3 minute

Zašto koristiti prilagođena pravila provjere valjanosti podataka?

L'uso di pravila di validacija podataka prilagođeno u Laravel, nudi nekoliko prednosti:

  1. Ponovna upotreba u cijeloj aplikaciji
  2. Enkapsulacija složene logike validacije
  3. Jednostavniji test pravila
  4. Čistiji, čitljiviji kod

Kreiranje prilagođenog pravila validacije podataka

Hajde da napravimo jedan pravilo prilagođeno za validate složene lozinke, a za to koristimo sljedeću naredbu:

php artisan make:rule StrongPassword
jako pravilo validacije podataka lozinke
Potvrdite kreiranje novog pravila

Zatim idemo na prilagođavanje metode passes() gdje specificiramo pravilo di prihvatanje, i metodu message() gdje specificiramo poruku za prikaz kada se pravilo to se ne poštuje

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class StrongPassword implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        // Password must be at least 8 characters and contain at least one uppercase letter, one lowercase letter, and one number
        return preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/', $value);
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be at least 8 characters and contain at least one uppercase letter, one lowercase letter, and one number.';
    }
}

Korištenje prilagođenog pravila

Možete koristiti ovo pravilo prilagođeno u zahtjevima modula, u kontroler ili gde god da pokrenete validacija dati. U nastavku vam dajem dva primjera upotrebe pravila StrongPassword, oba u obrazac zahtjeva to u kontroler.

use App\Rules\StrongPassword;


// In a form request
public function rules()
{
    return [
        'password' => ['required', new StrongPassword],
    ];
}


// In a controller
public function store(Request $request)
{
    $request->validate([
        'password' => ['required', new StrongPassword],
    ]);
    // Process the validated data...
}

Napredne tehnike

Parametrizovana pravila

Možete napraviti svoje pravila fleksibilnije prilagođavanje prihvatanjem parametara. U sljedećem primjeru imamo a pravilo po l 'prihvatanje minimalnog "parametrizovanog" broja riječi. Parametar "broj riječi" je postavljen u metodi konstruktora:

klasa MinWords implementira pravilo
{
privatni $minWords;

javna funkcija __construct($minWords)
{
$this->minWords = $minWords;
}
javna funkcija prolazi ($attribute, $value)
{
return str_word_count($value) >= $this->minWords;
}
poruka javne funkcije()
{
return ":attribut mora sadržavati najmanje {$this->minWords} riječi.";
}
}
// Upotreba
'description' => ['potrebno', nove MinWords(5)]

Korištenje zavisnosti

Ako vaše pravilo treba da stupi u interakciju s drugim uslugama ili bazom podataka, možete koristiti Laravelov servisni kontejner:

klasa UniqueInOrganization implementira pravilo
{
privatna $organizacija;

javna funkcija __construct($organizacija)
{
$this->organization = $organizacija;
}
javna funkcija prolazi ($attribute, $value)
{
return !User::where('organization_id', $this->organization->id)
->gdje ($atribut, $vrijednost)
->postoji();
}
poruka javne funkcije()
{
return 'Atribut :atribut je već uzet unutar vaše organizacije.';
}
}

Testiranje prilagođenih pravila validacije podataka

Jedna od glavnih prednosti prilagođenih pravila je da se lako mogu testirati:

koristite App\Rules\StrongPassword;

class StrongPasswordTest proširuje TestCase
{
/** @test */
javna funkcija it_passes_for_strong_passwords()
{
$rule = nova StrongPassword;
$this->assertTrue($rule->passes('password', 'StrongPass1'));
$this->assertFalse($rule->passes('password', 'weakpass'));
}
}

autor