Я использую Akeneo 2.2.8 и пытаюсь использовать akeneo.storage.pre_save
-event для сравнения исходных данных о продукте с новыми предоставленными данными. Я делаю это, подписываясь на akeneo.storage.pre_save
-событие:
In event_subscribers.yml
:
parameters:
vendor.bundle.event_subscriber.product_save.class: Vendor\Bundle\CustomBundle\EventSubscriber\ProductSaveSubscriber
services:
vendor.bundle.event_subscriber.product_save:
class: '%vendor.bundle.event_subscriber.product_save.class%'
arguments:
- '@pim_catalog.repository.product'
tags:
- { name: kernel.event_listener, event: akeneo.storage.pre_save, method: onPreSave, priority: 255 }
In ProductSaveSubscriber.php
:
/**
* @var ProductRepositoryInterface
*/
protected $productRepository;
public function __construct(ProductRepositoryInterface $productRepository)
{
$this->productRepository = $productRepository;
}
public function onPreSave(GenericEvent $event)
{
/** @var Product $subject */
$subject = $event->getSubject();
if ($subject instanceof Product) {
$originalProduct = $this->productRepository->findOneByIdentifier($subject->getIdentifier());
foreach ($subject->getAttributes() as $attribute) {
if ($attribute->getReadOnly()) {
echo "{$attribute->getCode()} : {$subject->getValue($attribute->getCode())}\n";
echo "{$attribute->getCode()} : {$originalProduct->getValue($attribute->getCode())}\n";
}
}
}
}
Теперь, когда я запускаю этот код, я ожидаю, что второй оператор echo
предоставит исходные данные (поскольку я загрузил их заново). Однако исходный продукт, который я загружаю из репозитория, также содержит новые данные.
Также следует отметить, что если я добавлю die()
-оператор, данные не сохранятся в базе данных. Получается, что репозиторий возвращает модель в памяти или что-то в этом роде.
Может кто-то указать мне верное направление? Или я использую неправильный подход для сравнения вновь введенных данных с уже существующими?