Alex2aAlex2a MemberComments: 1 Received thanks: 0 Member since: October 2019

Hallo,

derzeit habe ich ein neues Feld im Registrierungs-Formular hinzugefügt:

<input name="address[additional][packingstation]" ... />

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

Sign In or Register to comment.