route('source'); return $this->user()->can('create', [app(\App\Models\Releve::class), $source]); } public function rules(): array { /** @var Source $source */ $source = $this->route('source'); $source->loadMissing('sourceType.fields'); $rules = []; foreach ($source->sourceType->fields as $field) { $base = "data.{$field->name}"; switch ($field->type) { case FieldType::Date: $rules["{$base}.valeur"] = [$field->required ? 'required' : 'nullable', 'string', 'max:50']; $rules["{$base}.calendrier"] = ['required', new Enum(CalendarType::class)]; break; case FieldType::Boolean: $rules[$base] = ['nullable', 'boolean']; break; case FieldType::Number: $rules[$base] = [$field->required ? 'required' : 'nullable', 'numeric']; break; case FieldType::Select: $options = $field->options ?? []; $rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'in:' . implode(',', $options)]; break; default: // text, textarea $rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'max:2000']; } } return $rules; } }