Получить продукт Akeneo PIM в стандартном формате в своем комплекте - PullRequest
0 голосов
/ 04 сентября 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 05 сентября 2018

При поиске продуктов в Akeneo PIM следует использовать Product Query Builder . Подробнее об этом вы можете прочитать в официальной документации по продуктам 1003 *. Был задан довольно похожий вопрос, мой ответ вы можете увидеть здесь: Запрос продуктов с Doctrine ind Akeneo .

Чтобы получить стандартный формат продукта , вы можете нормализовать свой экземпляр 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');
}
...