*/ public function rules(): array { return [ 'last_name' => ['required', 'string', 'min:2'], 'first_name' => ['required', 'string', 'min:2'], 'email' => ['required', 'email:rfc,dns,spoof'], 'subject' => ['required', 'string', 'min:2'], 'order_ref' => ['nullable', 'string', 'regex:/^[0-9]+$/'], 'message' => ['required', 'string', 'min:20', 'max:1900'], 'file' => ['nullable', 'file', 'mimes:jpg,jpeg,png,pdf', 'max:5120'], 'ok_cgv' => ['accepted'], ]; } /** @return array */ #[\Override] public function messages(): array { return [ 'ok_cgv.accepted' => trans('validation.custom.ok_cgv.accepted'), 'file.max' => trans('validation.custom.file.max'), 'file.mimes' => trans('validation.custom.file.mimes'), ]; } public function toValueObject(): ContactFormData { return new ContactFormData( lastName: $this->string('last_name')->value(), firstName: $this->string('first_name')->value(), email: $this->string('email')->value(), subject: $this->string('subject')->value(), message: $this->string('message')->value(), orderRef: empty($this->input('order_ref')) ? null : $this->string('order_ref')->value(), file: $this->hasFile('file') ? new AttachedFile( path: $this->file('file')->getRealPath(), originalName: $this->file('file')->getClientOriginalName(), mimeType: $this->file('file')->getMimeType() ?? 'application/octet-stream', ) : null ); } }