> */ public function rules(): array { return [ 'salutation' => ['required', 'in:mr,ms'], 'first_name' => ['required', 'string', new PersonName], 'last_name' => ['required', 'string', new PersonName], 'email' => ['required', 'string', 'email:filter', 'max:255', 'unique:users'], 'email-confirm' => ['required', 'same:email'], 'password' => ['required', 'string', 'max:255', 'confirmed', Password::defaults()], 'password_confirmation' => ['required', 'string'], 'accepted_data_protection' => ['accepted'], 'from_member_id' => ['nullable', 'string', 'max:20'], 'cf-turnstile-response' => ['required', new TurnstileToken($this->ip())], ]; } /** * @return array */ public function messages(): array { return [ 'cf-turnstile-response.required' => __('form_protection.captcha_failed'), ]; } protected function failedValidation(Validator $validator): void { FormSpamGuard::log($this, 'register', 'validation', ['fields' => array_keys($validator->failed())]); parent::failedValidation($validator); } }