• Час читання ~4 хв
  • 28.01.2025

Валідація є важливою частиною будь-якої програми. Це гарантує, що дані, які обробляє ваша програма, є точними, надійними та безпечними. У Laravel процес перевірки є безперебійним, потужним і простим у впровадженні. Серед різноманітних функцій, які пропонує Laravel, перевірка масивів є однією з найкорисніших, але іноді неправильно зрозумілих функцій. У цьому посібнику ми детально зануримося в перевірку масивів Laravel і пояснимо її зручним для початківців способом.

Що таке перевірка масиву в Laravel?

Перевірка масивів у Laravel дозволяє перевіряти вхідні дані, які структуровані у вигляді масивів. Це особливо корисно при роботі з формами або API, які приймають кілька вхідних даних під одним іменем поля, наприклад:

  • Список адрес електронної пошти.
  • Колекція варіантів товарів.
  • Набір завантажених файлів.

Наприклад, розглянемо сценарій, у якому потрібно перевірити кілька телефонних номерів, наданих користувачем як один вхід. Перевірка масиву Laravel робить це не тільки можливим, але й простим.

Базова перевірка

масиву Почнемо з простого прикладу. Припустімо, у вас є ім'я поля items[] форми, де користувачі можуть надіслати список елементів. Щоб перевірити цей вхід, ви можете вказати правило перевірки у вашому контролері таким чином:

use Illuminate\Http\Request;

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

Ось що це робить:

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

Перевірка елементів у масиві

Що робити, якщо ви хочете перевірити кожен елемент у масиві items ? Наприклад, ви хочете переконатися, що кожен елемент є рядком з максимальною довжиною 50 символів. Laravel дозволяє використовувати для цього точкову нотацію:

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

Пояснення:

  • items.*: націлений на кожен елемент масиву items .
  • string: гарантує, що кожен елемент є рядком.
  • max:50: обмежує довжину кожного рядка до 50 символів.

Якщо користувач надішле невірний масив, Laravel поверне помилку перевірки із зазначенням проблемного елемента, наприклад items.2 must not exceed 50 characters.

Перевірка масивів за допомогою ключів

У деяких випадках ваші масиви можуть мати певні ключі, які потребують перевірки. Наприклад:

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

Ось що відбувається:

  • products: гарантує, що products поле є масивом.
  • products.*.name: гарантує, що кожен продукт має name поле, яке є обов'язковим рядком.
  • products.*.price: гарантує, що для кожного товару є price поле, яке є обов'язковим числом, більшим або рівним 0.

Приклад вхідних даних:

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

Обробка помилок

валідації Коли перевірка не вдається, Laravel автоматично перенаправляє користувача назад на попередню сторінку з помилками перевірки. Ви можете відображати ці помилки у своїх шаблонах Blade за допомогою $errors змінної:

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

Це забезпечує інтуїтивний спосіб інформувати користувачів про будь-які проблеми з їхнім введенням.

Користувальницькі правила валідації для масивів

Іноді вбудованих правил валідації недостатньо, і вам потрібно реалізувати кастомну логіку. Laravel спрощує це, дозволяючи вам визначати власні правила:

  1. Створіть власне правило за допомогою php artisan команди:

    php artisan make:rule ValidPhoneNumber
    
  2. Реалізуйте логіку в генерованому файлі правил:

    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. Застосуйте користувацьке правило у своїй перевірці:

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

Перевірка вкладених масивів

Ви можете перевіряти глибоко вкладені масиви за допомогою точкової нотації. Наприклад:

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

Приклад введення:

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

Поради та найкращі практики

  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.

Висновок

: Перевірка масивів Laravel є потужною функцією, яка спрощує роботу зі складними структурами даних. Розуміючи основи та вивчаючи передові варіанти використання, ви можете переконатися, що ваші програми ефективно обробляють перевірку даних і забезпечують кращу взаємодію з користувачем. Незалежно від того, чи працюєте ви з простими списками чи глибоко вкладеними масивами, інструменти перевірки Laravel допоможуть вам.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

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...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297

Ми знищуємо "шахеди" щодня. Щоразу — це врятовані життя. Але нам потрібна мобільність: бус або прицеп. Кожен донат = ще одна ніч під захистом.

🚐 Збір на бус для мого екіпажу, полк 1020 🎯 Ціль: 500 000 ₴
🔗 Посилання на банку 💳 4441 1111 2546 4663