mapWithKeys(fn(array $column) => [ // Ключом будет название поля, значением - массив его правил $column['data']['name_field'] => $this->resolveRulesForColumn($column, $formId) ]) ->all(); } /** * Определяет и делегирует создание правил в зависимости от типа поля. */ private function resolveRulesForColumn(array $column, int $formId): array { $type = $column['type'] ?? 'default'; return match ($type) { 'multiple_choice' => ['required', 'array', 'min:1'], default => $this->buildRulesFromConfig($column, $formId), }; } /** * Собирает стандартный набор правил валидации из конфигурации поля. */ private function buildRulesFromConfig(array $column, int $formId): array { $configRules = $column['data']['rules'] ?? []; $validationRules = []; // Правила, которые просто включаются по флагу true if (!empty($configRules['required'])) { $validationRules[] = 'required'; } // Правила, требующие значения (min, max, и т.д.) foreach (['min', 'max'] as $rule) { // Используем isset для корректной обработки значения '0' if (isset($configRules[$rule])) { $validationRules[] = "{$rule}:{$configRules[$rule]}"; } } // Сложные правила, требующие инстанцирования объектов if (!empty($configRules['unique'])) { $fieldName = $column['data']['name_field']; $validationRules[] = new UniqueJsonField($formId, $fieldName); } return $validationRules; } }