• Время чтения ~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