Правило in_array_keys у Laravel: перевірка часткових ключів масиву

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 02 липня, 2025
Правило валідації `in_array_keys` у Laravel пропонує елегантне вирішення для перевірки, чи містить масив принаймні один ключ з вказаного набору. Досліджуйте, як це правило допомагає ефективно управляти конфігураційними сценаріями і спростити процес валідації у ваших додатках!

Правило валідації in_array_keys у Laravel пропонує елегантне рішення для ситуацій, коли масиви повинні містити принаймні один ключ із зазначеного набору, без вимоги до наявності всіх ключів.

Це правило вирішує поширені проблеми валідації в гнучких системах конфігурації, де користувачам потрібно обрати один або кілька варіантів з численних допустимих опцій:

$validator = Validator::make($data, [
    'settings' => 'array|in_array_keys:email,sms,push',
]);

Правило успішно проходить валідацію, якщо масив містить будь-який з указаних ключів, що робить його ідеальним для сценаріїв з необов'язковими налаштуваннями.

class NotificationController extends Controller
{
    public function updateChannels(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'channels' => 'required|array|in_array_keys:email_notifications,sms_alerts,push_messages',
            'channels.email_notifications' => 'nullable|array',
            'channels.email_notifications.address' => 'required_with:channels.email_notifications|email',
            'channels.email_notifications.frequency' => 'required_with:channels.email_notifications|in:immediate,daily,weekly',
            'channels.sms_alerts' => 'nullable|array',
            'channels.sms_alerts.phone' => 'required_with:channels.sms_alerts|regex:/^\+[1-9]\d{1,14}$/',
            'channels.sms_alerts.carrier' => 'required_with:channels.sms_alerts|string',
            'channels.push_messages' => 'nullable|array',
            'channels.push_messages.device_token' => 'required_with:channels.push_messages|string|min:64',
        ]);
 
        if ($validator->fails()) {
            return response()->json(['errors' => $validator->errors()], 422);
        }
 
        $user = $request->user();
        $channels = $request->input('channels');
 
        foreach ($channels as $channelType => $config) {
            $this->configureNotificationChannel($user, $channelType, $config);
        }
 
        return response()->json(['message' => 'Канали сповіщень успішно оновлені']);
    }
 
    private function configureNotificationChannel($user, $type, $config)
    {
        $user->notificationChannels()->updateOrCreate(
            ['channel_type' => $type],
            ['configuration' => $config, 'is_active' => true]
        );
    }
}

Цей підхід до валідації відмінно підходить для конфігурацій платіжних систем, інтеграцій із соціальними мережами та мульти-користувацьких застосунків, де доступні різні набори функцій