Bei der Registrierung und im Profil sollen die Benutzer Ihre Kundennummer eingeben/ändern können, die als Attribut/Freitextfeld dem Account zugeordnet wird (s_user_attributes).
Das funktioniert soweit, die Eingaben werden aus beiden Formularen ins Attribut übernommen.
Nun würde ich die Eingaben gerne noch einfachen Prüfungen unterziehen, z. B. nur Ziffern und eine Länge von 5 - 8 Zeichen.
public static function getSubscribedEvents() {
return ['Shopware_Form_Builder' => 'onFormBuild'];
}
public function onFormBuild(\Enlight_Event_EventArgs $args) {
$reference = $args->getReference(); // hier kommt nicht (mehr?) der Name ProfileUpdateFormType::class, sondern das Prefix
if ($reference !== 'profile')
return;
$builder = $args->getBuilder();
// TEST: firstname auf mind. 5 Zeichen -> das funktioniert!
$builder->add('firstname', \Symfony\Component\Form\Extension\Core\Type\TextType::class, [
'constraints' => [
new \Symfony\Component\Validator\Constraints\Length(['min' => 5])
]
]);
// customNumber auf mind. 5 Zeichen -> das hat keine Auswirkung!
$builder->get('attribute')->add('customNumber', \Symfony\Component\Form\Extension\Core\Type\TextType::class, [
'constraints' => [
new \Symfony\Component\Validator\Constraints\Length(['min' => 5])
]
]);
}
Gibt es hier eine Aussage seitens Shopware bzw. eine Lösung für leere Attribute?
Wir stehen aktuell vor einem ähnlichen Problem: Für die Bearbeitung einer Adresse wurden von uns zusätzliche Attributfelder hinzugefügt (z.B. zusätzliche Handynummer).
Das Speichern der Attribute funktioniert nur, falls eine Handynummer eingegeben wird, jedoch nicht wenn man dieses zusätzliche Attribut leeren möchte.
Dies ist problematisch, auch aus DSGVO-Sicht, da der Kunde dadurch eingegebene Daten nicht wieder löschen kann!
Durch die aktuelle Logik im Shopware Core, wird ein leeres Attribut beim Speichern einer Kundenadresse nicht übernommen, sondern mit dem vorherigen Wert gespeichert.
Diese Logik wird in der Datei engine\Shopware\Bundle\AccountBundle\Form\Account\AttributeFormType.php Zeile 92 angestoßen ($builder->addEventListener)
Für jedes Attribut wird der aktuell im Model gespeicherte Wert geholt und als „empty_data“ gesetzt
Das setzen der EmptyData erfolgt in vendor/symfony/form/Extension/Core/Type/FormType.php mit der Methode buildForm (und darin setEmptyData)
Hast Du inzwischen eine Lösung für Dein Problem gefunden? Am Ticket hat sich ja nichts getan. Ich habe nämlich auch ein Plugin mit eigenen s_user_attributes Feldern erstellt, die im Frontend Formular hinzugefügt und bearbeitet werden können. Die Felder sind keine Pflichtfelder. Beim abschließenden Testen ist mir dann aber auch aufgefallen, dass sich die Felder im Frontend nicht mehr leeren lassen.
Hast Du inzwischen eine Lösung für Dein Problem gefunden? Am Ticket hat sich ja nichts getan. Ich habe nämlich auch ein Plugin mit eigenen s_user_attributes Feldern erstellt, die im Frontend Formular hinzugefügt und bearbeitet werden können. Die Felder sind keine Pflichtfelder. Beim abschließenden Testen ist mir dann aber auch aufgefallen, dass sich die Felder im Frontend nicht mehr leeren lassen.
Beste Grüße und schöne Weihnachten,
( … auch ) Dennis
Hi Dennis!
Nein, wir haben dort bisher keinen weiteren Aufwand reingesteckt, da der entsprechende Kunden-Shop noch nicht Live ist, aber schade, dass das Problem nicht beachtet wird…