*/ public function rules(): array { ToolboxHelper::validateRecaptcha($this); return [ 'lastName' => ['required', 'string', 'min:3', 'max:50'], 'firstName' => ['required', 'string', 'min:3','max:50'], 'email' => ['required', 'email', 'email:strict,rfc,spoof', 'max:255'], 'role' => ['required', 'string', 'min:3','max:30'], 'company' => ['required', 'string', 'min:3','max:60'], 'community' => ['required', 'string'], 'phone' => ['required', 'string', 'min:10','max:10', 'regex:/^[0-9+\-\s]+$/'], 'message' => ['required', 'string', 'min:5', 'max:255'], 'supportsManifesto' => ['nullable', 'boolean'], 'acceptsUsage' => ['required', 'accepted'], ]; } /** * @return array */ public function messages(): array { return [ 'lastName.required' => 'Le nom est obligatoire.', 'firstName.required' => 'Le prénom est obligatoire.', 'email.required' => "L'adresse e-mail est obligatoire.", 'email.email' => "L'adresse e-mail n'est pas valide.", 'role.required' => 'La fonction est obligatoire.', 'company.required' => 'La société est obligatoire.', 'community.required' => 'Veuillez sélectionner une communauté.', 'phone.required' => 'Le numéro de téléphone est obligatoire.', 'message.required' => 'Le message est obligatoire.', 'acceptsUsage.accepted' => "Vous devez accepter l'utilisation de vos données.", 'phone.regex' => 'Le numéro de téléphone ne doit contenir que des chiffres.', ]; } protected function rateLimitPrefix(): string { return 'join-group'; } protected function rateLimitMessageKey(): string { return 'validation.too_many_attempts'; } public function withValidator(Validator $validator): void { $validator->after(fn (Validator $v) => $this->applyEmailRateLimit($v)); } }