I've updated the code for the e-commerce bundle and just about everything is functioning again. The only thing I can't get to function is the product pool which reads the config and adds product types to the pool. The AddProductProviderCompilerPass is being run and configuration is read but the pool is still empty.
I checked if the config is read and the code runs which is positive. But the pool stays empty after running this code... Can't find changes in symphony 5.4 which could cause this but perhaps I'm overlooking something?
Some help is very much appreciated!
class AddProductProviderCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container): void
{
$pool = $container->getDefinition('sonata.product.pool');
$calls = $pool->getMethodCalls();
$pool->setMethodCalls([]);
$map = [];
foreach ($calls as $method => $arguments) {
if ('__hack' !== $arguments[0]) {
$pool->addMethodCall($arguments[0], $arguments[1]);
continue;
}
foreach ($arguments[1] as $code => $options) {
// define a new ProductDefinition
$definition = new Definition(ProductDefinition::class, [new Reference($options['provider']), new Reference($options['manager'])]);
$definition->setPublic(false);
$container->setDefinition($code, $definition);
$container->getDefinition($options['provider'])->addMethodCall('setCode', [$code]);
$pool->addMethodCall('addProduct', [$code, new Reference($code)]);
$map[$code] = $container->getDefinition($options['manager'])->getArgument(0);
$container->getDefinition($options['provider'])->addMethodCall('setBasketElementManager', [new Reference('sonata.basket_element.manager')]);
$container->getDefinition($options['provider'])->addMethodCall('setCurrencyPriceCalculator', [new Reference('sonata.price.currency.calculator')]);
$container->getDefinition($options['provider'])->addMethodCall('setProductCategoryManager', [new Reference('sonata.product_category.product')]);
$container->getDefinition($options['provider'])->addMethodCall('setProductCollectionManager', [new Reference('sonata.product_collection.product')]);
$container->getDefinition($options['provider'])->addMethodCall('setOrderElementClassName', [$container->getParameter('sonata.order.order_element.class')]);
$container->getDefinition($options['provider'])->addMethodCall('setEventDispatcher', [new Reference('event_dispatcher')]);
if (\array_key_exists('variations', $options)) {
$container->getDefinition($options['provider'])->addMethodCall('setVariationFields', [$options['variations']['fields']]);
}
}
}
$container->getDefinition('sonata.product.subscriber.orm')->replaceArgument(0, $map);
}
}