Hallo zusammen
ich bin momentan dabei für einen Kunden Shop das Registrierungsformular zu erweitern und kämpfe seit Stunden mit dem Problem, dass nach dem Ausfüllen des Formulars ein Kunde angelegt werden kann ohne dass alle Felder die ich hinzugefügt habe die mit dem tag „required“ versehen sind auch ausgefüllt sind.
Der Fehler ist höchstwahrscheinlich auf nicht vorhandene Form Violations zurückzuführen.
Nun meine Frage: Wie füge ich Form Violations für meine Felder richtig hinzu?
Ich habe in den TWIG Templates zwei verschiedene Arten ausmachen können wie diese eingebunden werden.
Beispielsweise wird für „Firma“ eine Variable violationPath gesetzt:
{% if formViolations.getViolations("/company") is not empty %}
{% set violationPath = "/company" %}
{% elseif formViolations.getViolations("/#{prefix}/company") is not empty %}
{% set violationPath = "/#{prefix}/company" %}
{% endif %}
Im block component_address_form_company_name_input_error wird dann anhand dieser Variable die TWIG für die Form Violation eingebunden:
{% if violationPath %}
{% sw_include '@Storefront/storefront/utilities/form-violation.html.twig' %}
{% endif %}
Und im Input Feld wird dann das Klassen Attribut mit is-invalid folgendermaßen gesetzt:
class="form-control{% if violationPath %} is-invalid{% endif %}
Den selben Aufbau habe ich auch mit meinen eigenen Feldern versucht, aber das Formular konnte trotzdem abgeschickt werden und der Pfad war nicht in den Form Violations drin.
Dabei ist mir aber noch folgende andere Art der Einbindung von Form Violations aufgefallen, diesmal am Beispiel von firstName:
{% if formViolations.getViolations('/firstName') is not empty %}
{% sw_include '@Storefront/storefront/utilities/form-violation.html.twig' with {
violationPath: '/firstName'
} %}
{% endif %}
Das Klassen Attribut is-invalid wird hier so gesetzt:
class="form-control{% if formViolations.getViolations('/firstName') is not empty %} is-invalid{% endif %}"
Warum gibt es hier zwei verschiedene Wege und warum funktionieren beide nicht wenn man eigene Felder so definiert?
Ich habe das Gefühl, dass ich irgendetwas übersehe. Wahrscheinlich muss man an irgendeiner anderen Stelle noch etwas anpassen.
Ich freue mich auf Antworten falls jemand in diesem konkreten Fall Erfahrung hat.