Получите продукт Akeneo PIM в стандартном формате в собственном комплекте

У меня есть пользовательский пакет symfony, используемый в Akeneo 1.6 (некоторое время назад он был обновлен с 1.3), который мне нужно портировать на Akeneo 2.2.

Мне нужно получить все данные о продукте по идентификатору продукта в действии контроллера. Это было сделано с помощью $repository->getFullProduct($productId). Этот метод был удален в текущей версии Akeneo.

Во время исследования я обнаружил, что «стандартный формат» кажется полезным, поскольку он содержит все данные о продукте в виде массива.

Как я могу получить эти данные? Это не обязательно должно быть чистое решение, Quick&Dirty (как и весь пакет ;) ) вполне подойдет. Это только для внутреннего использования.

Я попробовал некоторые вещи, такие как $productStandard = $this->container->get('pim_api.normalizer.product')->normalize($product); с разными службами, но на основе бесполезной ошибки сообщения, которые я получил, я думаю, что это просто не имеет смысла.


person Cosmo Phobia    schedule 04.09.2018    source источник


Ответы (1)


При поиске продуктов в Akeneo PIM следует использовать Конструктор запросов продуктов. Подробнее об этом можно прочитать в официальной документации по запросам продуктов. Был задан очень похожий вопрос, вы можете увидеть мой ответ здесь: Акенео.

Чтобы получить стандартный формат продукта, вы можете нормализовать Product пример с нормализатором.

Так это будет выглядеть так:

<?php
// Get a new instance of the PQB
$pqbFactory = $this->getContainer()->get('pim_catalog.query.product_query_builder_factory');
$pqb = $pqbFactory->create([
    'default_locale' => 'en_US',
    'default_scope' => 'ecommerce'
]);

// Now you can search for products with your ids
$pqb->addFilter(
    'id',
    'IN',
    ['234', '22', '90']
);

// Retrieve your products
$productsCursor = $pqb->execute();
$normalizedProducts = [];
foreach ($productsCursor as $product) {
    // normalize them to the standard format
    $normalizedProducts[] = $this->getContainer()->get('pim_standard_format_serializer')->normalize($product, 'standard');
}
person grena    schedule 04.09.2018
comment
Спасибо за ваш ответ, это очень похоже на то, что я пробовал. Когда я пытаюсь использовать Службу, как в примере, я получаю: Вы запросили несуществующую службу pim_standard_format_serializer - person Cosmo Phobia; 05.09.2018
comment
Вместо pim_standard_format_serializer можно попробовать ->get('pim_catalog.normalizer.standard.product')->normalize($product, 'standard'); - person grena; 05.09.2018
comment
Теперь я получаю сообщение об ошибке, которое видел раньше, но не знаю, что с этим делать: Сериализатор должен быть нормализатором. - person Cosmo Phobia; 06.09.2018