Hallo,
derzeit habe ich ein neues Feld im Registrierungs-Formular hinzugefügt:
Da das Feld anschließend in die Straße geschrieben wird, benötige ich das oben genannte Feld nur vorrübergehend - dafür habe ich mich gegen ein Attribut entschieden.
Mein Subscriber sieht wie folgt aus:
/**
* Subscribe to an event
* @return array
*/
public static function getSubscribedEvents()
{
return [
'Shopware_Form_Builder' => 'onFormBuild',
];
}
/**
* @param EventArgs $args
*/
public function onFormBuild(EventArgs $event)
{
$reference = $event->get('reference');
if ($reference !== 'address')
return;
/** @var FormBuilderInterface $builder */
$builder = $event->get('builder');
$builder->get('additional')->add('packingstation', TextType::class, [
'constraints' => [
new DeliveryType(),
],
]);
}
Weiterhin gibt es die Klasse DeliveryTypeValidator, welche später die Logik für die Validierung enthalten soll:
/**
* Class ZipMatchPatternValidator
* @package SportSparZIPValidation\Validator\Constraints
*/
class DeliveryTypeValidator extends ConstraintValidator
{
/**
* validation
* @param mixed $value
* @param Constraint $constraint
*/
public function validate($value, Constraint $constraint)
{
$this->context->buildViolation($constraint->message)->addViolation();
}
}
In der Methode validate sollte nun als $value eigentlich der Wert des Feldes übergeben werden, jeodoch wird dieser nie übermittelt.
$data = $this->context->getRoot()->getData();
Enthält zwar den Feldnamen packingStation, jedoch ist der Wert immer “null”.
Ersetze ich
$builder->get('additional')->add('packingstation', TextType::class, [
'constraints' => [
new DeliveryType(),
],
]);
durch:
$builder->add('zip', TextType::class, [
'constraints' => [
new DeliveryType(),
],
]);
, dann wird der Wert Korrekt an den Validator übergeben übergeben.
Laut dieser Anleitung, sollte die validierung von “additional”-Informationen jedoch kein Thema sein: https://developers.shopware.com/developers-guide/address-management-guide/#extending-the-address-form
Hat hier jemand einen Tip?
Viele Grüße- Alex