user()->can('update', $this->route('releve')); } public function rules(): array { /** @var \App\Models\Releve $releve */ $releve = $this->route('releve'); $releve->source->loadMissing('sourceType.fields'); $rules = []; foreach ($releve->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; case FieldType::Place: $rules[$base] = [$field->required ? 'required' : 'nullable', 'integer', 'exists:lieux,id']; break; default: $rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'max:2000']; } } return $rules; } }