Open pfazzi opened 5 years ago
Actually, when you want to add a custom attribute type, you need to override AttributeUpdater and redefine this method. I don't see another way to do that natively.
Yes, i know but that is dangerous because if i create 2 independent bundles that add 2 different attribute types, i have to redefine this method 2 times but eventually they will result with an incompatible setup because both the bundles redefine that method and i have to choose one of them.
Actualy i solved using a Compiler Pass that extends the definition of the pim_catalog.updater.attribute
service adding the property unit
, that is the custom field of my attribute:
final class CompilerPass implements CompilerPassInterface
{
/**
* You can modify the container here before it is dumped to PHP code.
*
* @param ContainerBuilder $container
*/
public function process(ContainerBuilder $container): void
{
$definition = $container->getDefinition('pim_catalog.updater.attribute');
$properties = $definition->getArgument(4);
$definition->setArgument(4, array_merge($properties, ['unit']));
}
}
This way if i need another custom attribute it will not be in conflict, in addition i donìt need to redefine the method. Do you see any drawbacks in this solution?
Anyway I think this AttributeUpdater
service should be modified in order to be more open for extension.
Glad to see that you found a solution.
I've raised a technical improvement ticket to our Product Team (internal reference is TIP-1166). We will keep you updated when it will be prioritized.
Thanks! Do you see any drawbacks in this solution?
I'm implementing a custom attribute type. It has a custom field i'd like to store in its properties. Class Akeneo\Pim\Structure\Component\Updater\AttributeUpdater in it's method validateDataType has an hardcoded list of allowed fields, so in order to add a field i have to refedine that method. Is there a way to avoid it?