eikona-media/akeneo7-0-tessa-connector
Installation:
composer require eikona-media/akeneo7-0-tessa-connector
Ensure your Akeneo version is 7.0.x (Community or Enterprise).
Enable the Bundle:
Add to config/bundles.php:
Eikona\Tessa\ConnectorBundle\EikonaTessaConnectorBundle::class => ['all' => true],
For Enterprise Edition, also enable:
Eikona\Tessa\EEConnectorBundle\EikonaTessaEEConnectorBundle::class => ['all' => true],
Routing:
Append to config/routes/routes.yml:
tessa_media:
resource: "@EikonaTessaConnectorBundle/Resources/config/routing.yml"
First Use Case:
Media Synchronization:
TessaMedia entity to manage asset metadata (e.g., title, description, tags).// Example: Linking a TESSA asset to a product
$product->getMedia()->add($tessaMediaEntity);
$product->save();
Event-Driven Integration:
product.save) to trigger TESSA actions:
// In a service or event subscriber
public function onProductSave(ProductSaveEvent $event)
{
$product = $event->getProduct();
$this->tessaService->syncProductMedia($product);
}
services.yaml:
services:
App\EventSubscriber\TessaSyncSubscriber:
tags:
- { name: kernel.event_subscriber }
Custom Field Mapping:
// Example: Syncing a custom "video_url" field to TESSA
$tessaAsset->setCustomField('video_url', $product->getCustomField('video_url'));
$this->tessaClient->updateAsset($tessaAsset);
Bulk Operations:
TessaMediaManager to batch-upload assets:
$manager = $this->container->get('eikona_tessa.media_manager');
$manager->uploadMediaFromDirectory('/path/to/assets', $productId);
config/packages/eikona_tessa.yaml:
eikona_tessa:
client:
endpoint: 'https://your-tessa-instance.com/api'
api_key: '%env(TESSA_API_KEY)%'
use Eikona\Tessa\ConnectorBundle\Validator\Constraints as TessaAssert;
/**
* @Assert\Valid()
* @TessaAssert\TessaAssetExists()
*/
private $tessaMedia;
Routing Conflicts:
tessa_media routes don’t clash with existing Akeneo routes. Test with:
php bin/console debug:router | grep tessa
Enterprise vs. Community:
EEConnectorBundle. Forgetting this causes silent failures.composer show eikona-media/akeneo7-0-tessa-connector | grep "requires"
Media Ownership:
public function onProductDelete(ProductDeleteEvent $event)
{
$this->tessaService->deleteOrphanedAssets($event->getProduct());
}
Rate Limiting:
try {
$response = $this->tessaClient->upload($asset);
} catch (RateLimitException $e) {
sleep($e->getRetryAfter());
retry();
}
config/packages/eikona_tessa.yaml:
eikona_tessa:
debug: true # Logs API requests/responses
TessaClient to log failures:
public function callApi($method, $endpoint, $data = [])
{
try {
return parent::callApi($method, $endpoint, $data);
} catch (Exception $e) {
$this->logger->error('TESSA API Error: ' . $e->getMessage(), [
'endpoint' => $endpoint,
'data' => $data,
]);
throw $e;
}
}
Custom Asset Types:
Override the TessaMedia entity to support non-standard assets (e.g., 3D models):
// src/Entity/TessaCustomMedia.php
class TessaCustomMedia extends TessaMedia
{
private $modelFile;
// Add getters/setters and DB mapping
}
Webhook Listeners:
Listen for TESSA webhooks (e.g., asset updates) via Akeneo’s EventDispatcher:
public function onTessaWebhook(Request $request)
{
$payload = json_decode($request->getContent(), true);
$this->handleTessaEvent($payload['event_type']);
}
Register the route in routing.yml:
tessa_webhook:
path: /tessa/webhook
methods: [POST]
controller: App\Controller\TessaWebhookController::handle
Batch Processing:
Use Akeneo’s JobInstance to queue large syncs:
$job = new JobInstance();
$job->setJobName('tessa_sync');
$job->setData(['product_ids' => [1, 2, 3]]);
$this->jobRunner->run($job);
How can I help you explore Laravel packages today?