Hallo,
ich habe ein spezielles Kontaktformular als cms-Element angelegt:
{% 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:
<?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