Правило валідації 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]
);
}
}
Цей підхід до валідації відмінно підходить для конфігурацій платіжних систем, інтеграцій із соціальними мережами та мульти-користувацьких застосунків, де доступні різні набори функцій