# Bestätigungstext für eigenes Formular

**URL:** <https://forum.shopware.com/t/bestaetigungstext-fuer-eigenes-formular/96118>\
**Category:** Programmierung\
**Created:** [6. September 2022 um 19:25 UTC](https://forum.shopware.com/t/bestaetigungstext-fuer-eigenes-formular/96118 "2022-09-06T19:25:49Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![marcb](https://avatars.discourse-cdn.com/v4/letter/m/e5b9ba/32.png) [@marcb](https://forum.shopware.com/u/marcb)\
**Post date:** [6. September 2022 um 19:25 UTC](https://forum.shopware.com/t/bestaetigungstext-fuer-eigenes-formular/96118/1 "2022-09-06T19:25:49Z")

</div>

Hallo,  
ich habe ein spezielles Kontaktformular als cms-Element angelegt:

```auto
{% block sw_cms_form_sfv %}
    <form action="{{ path('frontend.form.send') }}"
        	method="post"
            data-form-csrf-handler="true"
            data-form-validation="true">
    
    ... einige Felder und submit-button ...
    
    </form>
{% endblock %}

```

Es wird (wie beim SW6-Kontaktformular) nach betätigen des Submit-Buttons die Controllermethode _handleSubmit_ aufgerufen:

```auto

<?php declare(strict_types=1);

namespace ZepanForm\Storefront\Controller;

use Shopware\Storefront\Controller\StorefrontController;
...
use ZepanForm\Service\EmailService;

/**
 * @Route(defaults={"_routeScope"={"storefront"}})
 */
class SfvFormController extends StorefrontController
{
    
    
    private EntityRepositoryInterface $cmsSlotRepository;
    
    /**
     * @internal
     */
    public function __construct(
        EntityRepositoryInterface $cmsSlotRepository,
        EmailService $emailService
        ) {
            $this->cmsSlotRepository = $cmsSlotRepository;
            $this->emailService = $emailService;
    }
    
    /**
     * @Since("6.1.0.0")
     * @Route("/form", name="frontend.form.send", methods={"POST"}, defaults={"XmlHttpRequest"=true, "_captcha"=true})
     */
    public function handleSubmit(Request $request, SalesChannelContext $context): JsonResponse
    {
        ... 
        Versand der Formulardaten als Email
        ...
        
        $message = $this->trans('contact.success');
         $response[] = [
             'type' => 'success',
             'alert' => $message,
         ];
         return new JsonResponse($response);
    }
}

```

Hier gibt _handleSubmit_ (_wie sendContactForm_ im SW6 _FormController_) ein JsonResponse zurück.  
Nur wird nach dem Abschicken beim SW6-Formular der $message-String an Stelle des Formulars im Frontend angezeigt und meine Methode gibt eine Browser-Ausgabe wie:

[{„type“:„success“,„alert“:„We have received your contact request and will process it as soon as possible.“}]

Woran liegt das und wie kann ich den $message-String an der Stelle des Formulars anzeigen lassen?

Grüße  
Marc

---

<div class="post-metadata">

**Author:** ![FritzPerson](https://avatars.discourse-cdn.com/v4/letter/f/85e7bf/32.png) [@FritzPerson](https://forum.shopware.com/u/FritzPerson)\
**Post date:** [7. September 2022 um 08:58 UTC](https://forum.shopware.com/t/bestaetigungstext-fuer-eigenes-formular/96118/2 "2022-09-07T08:58:58Z")

</div>

Hallo Marc,

das return geht an den Browser zurück, deswegen gibt’s hier JSON weil es ist eine JsonResponse.

Du könntest stattdessen z.B. einen Flash-Text anzeigen und auf die Formularseite zurück verweisen.

```auto
$this->addFlash(self::SUCCESS, $this->trans('contact.success'));
return $this->redirectToRoute('frontend.form'); // Route anpassen auf deine Formular-Seite?

```

Oder gleich auf eine extra Seite (Landing-Page?) verweisen. Direkt auf URL geht z.B. so:

```auto
$url = $this->generateUrl('frontend.home.page', [], UrlGeneratorInterface::ABSOLUTE_URL) . 'meine-seite';
return $this->redirect($url);

```

---

<div class="post-metadata">

**Author:** ![marcb](https://avatars.discourse-cdn.com/v4/letter/m/e5b9ba/32.png) [@marcb](https://forum.shopware.com/u/marcb)\
**Post date:** [7. September 2022 um 17:16 UTC](https://forum.shopware.com/t/bestaetigungstext-fuer-eigenes-formular/96118/3 "2022-09-07T17:16:59Z")

</div>

Vielen Dank, Das funktioniert schonmal schön.

Noch eine Frage für die erste Möglichkeit:

Da mein Formular ein CMS-Element ist und an verschiedenen Stellen im Frontend eingesetzt werden kann, würde ich die Route gerne im Controller automatisch auf die entsprechende Formularseite setzten. Ein {{ dump() }} auf der Formularseite gibt mir je nach Seite im Frontend natürlich einen anderen Wert für activeRoute. Wie komme ich nun an die entsprechende Route in der Controllermethode?

Viele Grüße  
Marc

---

<div class="post-metadata">

**Author:** ![FritzPerson](https://avatars.discourse-cdn.com/v4/letter/f/85e7bf/32.png) [@FritzPerson](https://forum.shopware.com/u/FritzPerson)\
**Post date:** [8. September 2022 um 06:51 UTC](https://forum.shopware.com/t/bestaetigungstext-fuer-eigenes-formular/96118/4 "2022-09-08T06:51:53Z")

</div>

> Wie komme ich nun an die entsprechende Route in der Controllermethode?

Das müsste z.B. so gehen:

```auto
return $this->redirectToRoute($request->attributes->get('_route'));

```

Da baut Shopware auf Symfony auf:  
[Controller (Symfony Docs)](https://symfony.com/doc/current/controller.html)  
[Routing (Symfony Docs)](https://symfony.com/doc/current/routing.html)

---

<div class="post-metadata">

**Author:** ![marcb](https://avatars.discourse-cdn.com/v4/letter/m/e5b9ba/32.png) [@marcb](https://forum.shopware.com/u/marcb)\
**Post date:** [8. September 2022 um 16:43 UTC](https://forum.shopware.com/t/bestaetigungstext-fuer-eigenes-formular/96118/5 "2022-09-08T16:43:51Z")

</div>

Leider hat

> return $this-\>redirectToRoute($request-\>attributes-\>get(‚\_route‘));

nur eine _MethodNotAllowedHttpException_ ausgelöst.  
Lösen lies sich das Problem dann mit

```auto
$data = $request->request->all();
return $this->redirectToRoute('frontend.navigation.page', ['navigationId' => $data['navigationId']]);

```

Trotzdem Vielen Dank nochmal!  
Viele Grüße  
Marc
