Add publish events
Edit on GitHubPublish and Synchronize are event-driven. Data is published only after a registered event is triggered. Follow these steps to register the events for them:
- Prepare data structure and activate
Propel Event Behavior
for thespy_glossary
database table:
<table name="spy_glossary" idMethod="native" allowPkInsert="true">
...
...
<behavior name="event">
<parameter name="spy_glossary_all" column="*"/>
</behavior>
</table>
- Register publish queue and the events to be tracked in
\Spryker\Shared\GlossaryStorage\GlossaryStorageConfig
:
<?php
...
namespace Spryker\Shared\GlossaryStorage;
use Spryker\Shared\Kernel\AbstractBundleConfig;
class GlossaryStorageConfig extends AbstractBundleConfig
{
...
/**
* Defines queue name as used for processing translation messages.
*/
public const PUBLISH_TRANSLATION = 'publish.translation';
/**
* This events that will be used for key writing.
*/
public const GLOSSARY_KEY_PUBLISH_WRITE = 'Glossary.key.publish';
/**
* This events that will be used for key deleting.
*/
public const GLOSSARY_KEY_PUBLISH_DELETE = 'Glossary.key.unpublish';
/**
* This events will be used for spy_glossary_key entity creation.
*/
public const ENTITY_SPY_GLOSSARY_KEY_CREATE = 'Entity.spy_glossary_key.create';
/**
* This events will be used for spy_glossary_key entity changes.
*/
public const ENTITY_SPY_GLOSSARY_KEY_UPDATE = 'Entity.spy_glossary_key.update';
/**
* This events will be used for spy_glossary_key entity deletion.
*/
public const ENTITY_SPY_GLOSSARY_KEY_DELETE = 'Entity.spy_glossary_key.delete';
...
}
- Adjust the RabbitMQ configuration with the newly introduced publish queue:
<?php
namespace Pyz\Client\RabbitMq;
...
use Spryker\Shared\GlossaryStorage\GlossaryStorageConfig;
...
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class RabbitMqConfig extends SprykerRabbitMqConfig
{
...
/**
* @return array
*/
protected function getPublishQueueConfiguration(): array
{
return [
...,
GlossaryStorageConfig::PUBLISH_TRANSLATION,
];
}
...
}
- Implement and register the
Publisher
plugin for the glossary storage module in\Pyz\Zed\Publisher\PublisherDependencyProvider
with the definedpublish.translation
queue.
<?php
namespace Pyz\Zed\Publisher;
...
use Spryker\Shared\GlossaryStorage\GlossaryStorageConfig;
use Spryker\Zed\GlossaryStorage\Communication\Plugin\Publisher\GlossaryKey\GlossaryDeletePublisherPlugin as GlossaryKeyDeletePublisherPlugin;
use Spryker\Zed\GlossaryStorage\Communication\Plugin\Publisher\GlossaryKey\GlossaryWritePublisherPlugin as GlossaryKeyWriterPublisherPlugin;
use Spryker\Zed\GlossaryStorage\Communication\Plugin\Publisher\GlossaryTranslation\GlossaryWritePublisherPlugin as GlossaryTranslationWritePublisherPlugin;
use Spryker\Zed\Publisher\PublisherDependencyProvider as SprykerPublisherDependencyProvider;
...
class PublisherDependencyProvider extends SprykerPublisherDependencyProvider
{
/**
* @return array
*/
protected function getPublisherPlugins(): array
{
return array_merge(
$this->getGlossaryStoragePlugins(),
);
}
...
/**
* @return array
*/
protected function getGlossaryStoragePlugins(): array
{
return [
GlossaryStorageConfig::PUBLISH_TRANSLATION => [
new GlossaryKeyDeletePublisherPlugin(),
new GlossaryKeyWriterPublisherPlugin(),
new GlossaryTranslationWritePublisherPlugin(),
],
];
}
...
}
- If you need original values or an additional data set in
EventEntityTransfer
, provide the configuration in the Entity class.getOriginalValueColumnNames
is called only on a save event.
<?php
...
namespace Orm\Zed\Glossary\Persistence;
use Orm\Zed\Glossary\Persistence\Map\SpyGlossaryTableMap;
use Spryker\Zed\Glossary\Persistence\Propel\AbstractSpyGlossary as BaseSpyGlossary;
class SpyGlossary extends BaseSpyGlossary
{
protected function getAdditionalValueColumnNames(): array
{
return [
SpyGlossaryTableMap::COL_IS_ACTIVE,
...
];
}
protected function getOriginalValueColumnNames(): array
{
return [
SpyGlossaryTableMap::COL_SOME_COLUMN,
...
];
}
}
Now, you can track the changes in the Glossary
entity. When it is created, updated, or deleted, an event is created and posted to the specified RabbitMQ publish queue (publish.translation
).
Thank you!
For submitting the form