*/ protected function rules(): array { return [ 'name' => 'required|string|max:120', 'email' => 'required|email|max:190', 'message' => 'required|string|max:5000', 'privacy' => 'accepted', ]; } /** * @return array */ protected function messages(): array { return [ 'name.required' => 'Bitte geben Sie Ihren Namen an.', 'email.required' => 'Bitte geben Sie Ihre E-Mail-Adresse an.', 'email.email' => 'Bitte geben Sie eine gültige E-Mail-Adresse an.', 'message.required' => 'Bitte beschreiben Sie kurz Ihr Anliegen.', 'privacy.accepted' => 'Bitte akzeptieren Sie die Datenschutzerklärung.', ]; } public function submit(): void { // Spam-Schutz: Bots befüllen die versteckten Felder. Wir tun so, als sei alles gut. if ($this->company !== '' || $this->url !== '') { $this->markeAlsGesendet('Danke. Ihre Anfrage wurde aufgenommen.'); return; } $this->validate(); $key = 'audit-anfrage:'.request()->ip(); if (RateLimiter::tooManyAttempts($key, maxAttempts: 3)) { $this->status = 'Zu viele Anfragen in kurzer Zeit. Bitte versuchen Sie es später erneut oder schreiben Sie an info@markemacht.de.'; return; } RateLimiter::hit($key, decaySeconds: 600); Mail::to(config('marketing.anfrage_empfaenger'))->send( new AuditAnfrage($this->name, $this->email, $this->message), ); $this->markeAlsGesendet('Danke. Ihre Anfrage wurde versendet.'); } private function markeAlsGesendet(string $meldung): void { $this->reset(['name', 'email', 'message', 'privacy', 'company', 'url']); $this->status = $meldung; $this->sent = true; // markemacht.js lauscht auf dieses Event und schließt das Modal nach kurzer Zeit. $this->dispatch('audit-sent'); } }; ?>
@if ($sent)

{{ $status }}

@else @endif