• Czas czytania ~4 min
  • 28.01.2025

Walidacja jest krytyczną częścią każdej aplikacji. Gwarantuje, że dane przetwarzane przez aplikację są dokładne, niezawodne i bezpieczne. W Laravel proces walidacji jest bezproblemowy, wydajny i łatwy do wdrożenia. Wśród różnych funkcji oferowanych przez Laravel, walidacja tablic jest jedną z najbardziej użytecznych, ale czasami niezrozumianych funkcjonalności. W tym przewodniku zagłębimy się w walidację tablicy Laravel i wyjaśnimy ją w sposób przyjazny dla początkujących.

Co to jest walidacja macierzy w Laravel?

Walidacja tablicy w Laravelu pozwala na walidację danych wejściowych, które są ustrukturyzowane jako tablice. Jest to szczególnie przydatne w przypadku formularzy lub interfejsów API, które akceptują wiele danych wejściowych pod jedną nazwą pola, takich jak:

  • Lista adresów e-mail.
  • Zbiór opcji produktów.
  • Zestaw przesłanych plików.

Rozważmy na przykład scenariusz, w którym należy zweryfikować wiele numerów telefonów podanych przez użytkownika jako pojedyncze dane wejściowe. Walidacja tablicy Laravela sprawia, że jest to nie tylko możliwe, ale także proste.

Podstawowa walidacja

tablicy Zacznijmy od prostego przykładu. Załóżmy, że masz pole formularza o nazwie items[] , w którym użytkownicy mogą przesyłać listę elementów. Aby zweryfikować to wejście, możesz określić regułę sprawdzania poprawności w kontrolerze w następujący sposób:

use Illuminate\Http\Request;

public function store(Request $request)
{
    $request->validate([
        'items' => 'required|array',
    ]);
    // Proceed with storing or processing the valid data.
}

Oto, co to robi:

  1. required: Ensures the items field is present in the request.
  2. array: Ensures that the value of items is indeed an array.

Walidacja elementów w tablicy

Co zrobić, jeśli chcesz zweryfikować każdy element w tablicy items ? Na przykład chcesz upewnić się, że każdy element jest ciągiem o maksymalnej długości 50 znaków. Laravel pozwala na użycie do tego notacji kropkowej:

$request->validate([
    'items' => 'required|array',
    'items.*' => 'string|max:50',
]);

Wyjaśnienie:

  • items.*: Określa wartość docelową każdego elementu tablicy items .
  • string: Zapewnia, że każdy element jest ciągiem.
  • max:50: Ogranicza długość każdego ciągu do 50 znaków.

Jeśli użytkownik prześle nieprawidłową tablicę, Laravel zwróci błąd walidacji określający problematyczny element, taki jak items.2 must not exceed 50 characters.

Sprawdzanie poprawności tablic za pomocą kluczy

W niektórych przypadkach tablice mogą mieć określone klucze, które wymagają walidacji. Na przykład:

$request->validate([
    'products' => 'required|array',
    'products.*.name' => 'required|string',
    'products.*.price' => 'required|numeric|min:0',
]);

Oto, co się dzieje:

  • products: Zapewnia, products że pole jest tablicą.
  • products.*.name: Zapewnia, że każdy produkt ma name pole, które jest wymaganym ciągiem.
  • products.*.price: Zapewnia, że każdy produkt ma price pole, które jest wymaganą liczbą większą lub równą 0.

Przykładowe dane wejściowe:

[
    'products' => [
        ['name' => 'Laptop', 'price' => 1200],
        ['name' => 'Mouse', 'price' => 25]
    ]
]

Obsługa błędów

walidacji Gdy walidacja nie powiedzie się, Laravel automatycznie przekierowuje użytkownika z powrotem do poprzedniej strony z błędami walidacji. Możesz wyświetlić te błędy w swoich szablonach Blade za pomocą zmiennej $errors :

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Zapewnia to intuicyjny sposób informowania użytkowników o wszelkich problemach z ich danymi wejściowymi.

Niestandardowe reguły sprawdzania poprawności

dla tablic Czasami wbudowane reguły sprawdzania poprawności nie wystarczą i należy zaimplementować logikę niestandardową. Laravel ułatwia to,

  1. umożliwiając definiowanie niestandardowych reguł:Utwórz niestandardową regułę za pomocą php artisan polecenia:

    php artisan make:rule ValidPhoneNumber
    
  2. Zaimplementuj logikę w wygenerowanym pliku reguły:

    namespace App\Rules;
    
    use Closure;
    use Illuminate\Contracts\Validation\ValidationRule;
    
    class ValidPhoneNumber implements ValidationRule
    {
        public function validate(string $attribute, mixed $value, Closure $fail): void
        {
            // Example: Check if the value matches a phone number pattern
            if(!preg_match('/^\+?[0-9]{10,15}$/', $value)) {
                $fail('Invalid phone number format.');
            }
        }
        public function message()
        {
            return 'The :attribute must be a valid phone number.';
        }
    }
  3. Zastosuj niestandardową regułę w swojej walidacji:

    use App\Rules\ValidPhoneNumber;
    
    $request->validate([
        'contacts.*.phone' => ['required', new ValidPhoneNumber()],
    ]);

Sprawdzanie poprawności tablic

zagnieżdżonych Tablice głęboko zagnieżdżone można sprawdzać poprawności przy użyciu notacji kropkowej. Na przykład:

$request->validate([
    'teams' => 'required|array',
    'teams.*.members' => 'required|array',
    'teams.*.members.*.name' => 'required|string',
    'teams.*.members.*.role' => 'required|string',
]);

Przykład wprowadzania:

[
    'teams' => [
        [
            'members' => [
                ['name' => 'Alice', 'role' => 'Developer'],
                ['name' => 'Bob', 'role' => 'Designer']
            ]
        ]
    ]
]

Wskazówki i sprawdzone metody

  1. Plan Your Validation Rules: Think through your data structure and validation requirements before writing the rules.
  2. Use Custom Messages: Customize error messages for better user experience.
    $request->validate([
        'items.*' => 'string|max:50',
    ], [
        'items.*.max' => 'Each item must not exceed 50 characters.',
    ]);
  3. Leverage Custom Rules: For complex scenarios, create reusable custom rules to keep your code clean.
  4. Test Your Validation: Always test different scenarios to ensure your validation works as expected.

Wnioski

Walidacja tablic Laravela to potężna funkcja, która upraszcza obsługę złożonych struktur danych. Rozumiejąc podstawy i eksplorując zaawansowane przypadki użycia, możesz upewnić się, że Twoje aplikacje skutecznie radzą sobie z walidacją danych i zapewniają lepsze środowisko użytkownika. Niezależnie od tego, czy pracujesz z prostymi listami, czy głęboko zagnieżdżonymi tablicami, narzędzia walidacji Laravel zapewnią Ci ochronę.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297

Codziennie zestrzeliwujemy „Shahedy”. Za każdym razem to uratowane życie. Potrzebujemy mobilności: busa lub przyczepy. Każda wpłata = kolejna noc pod ochroną.

🚐 Zbiórka na busa dla zespołu, pułk 1020 🎯 Cel: 500 000 ₴
🔗 Link do zbiórkiі 💳 4441 1111 2546 4663