- Co to jest walidacja macierzy w Laravel?
- Podstawowa walidacja tablicy
- Sprawdzanie poprawności elementów w tablicy
- Sprawdzanie poprawności tablic za pomocą kluczy
- Obsługa błędów walidacji
- Niestandardowe reguły sprawdzania poprawności dla tablic
- Sprawdzanie poprawności tablic zagnieżdżonych
- Wskazówki i sprawdzone metody
- Konkluzja
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:
-
required: Ensures theitemsfield is present in the request. -
array: Ensures that the value ofitemsis 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 tablicyitems. -
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 manamepole, które jest wymaganym ciągiem. -
products.*.price: Zapewnia, że każdy produkt mapricepole, 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,
-
umożliwiając definiowanie niestandardowych reguł:Utwórz niestandardową regułę za pomocą
php artisanpolecenia:php artisan make:rule ValidPhoneNumber -
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.'; } } -
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
- Plan Your Validation Rules: Think through your data structure and validation requirements before writing the rules.
-
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.', ]); - Leverage Custom Rules: For complex scenarios, create reusable custom rules to keep your code clean.
- 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ę.