Attributwert überschreiben
Event
Siehe Event Pre-Update-Attribute-Value
Event Subscriber
In bestimmten Fällen, etwa wenn statt eines internen Identifiers (z.B. 1) eine lesbare Bezeichnung (z.B. red) verwendet werden soll, besteht die Möglichkeit, den Wert im Rahmen eines Events zu modifizieren. Dies geschieht durch einen Event-Subscriber, der vor dem Speichern des Attributwerts eingreift und den Wert bei Bedarf ersetzt.
Beispiel
<?php
namespace AppBundle\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Twocream\ProductAttributeBundle\Event\TwocreamProductAttributeEvents;
use Twocream\ProductAttributeBundle\Event\UpdateAttributeValueEvent;
class TwocreamProductAttributeListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
TwocreamProductAttributeEvents::PRE_UPDATE_ATTRIBUTE_VALUE => 'preUpdateAttributeValue'
];
}
public function preUpdateAttributeValue(UpdateAttributeValueEvent $event): void
{
$attributeValueData = $event->getAttributeValueData();
if (
!empty($attributeValueData['data']['fieldName'])
&& $attributeValueData['data']['fieldName'] == 'SAP_COLOR'
) {
$colors = [
1 => 'red',
45 => 'yellow',
132 => 'green'
];
$sapValue = $attributeValueData['data']['value'];
$attributeValueData['data']['value'] = $colors[$sapValue] ?? $sapValue;
}
$event->setAttributeValueData($attributeValueData);
}
}