Add priority tag support For MenuBuilder

This commit is contained in:
Jean-Francois Monfort 2021-03-04 11:39:20 +01:00
parent 99b25e3abb
commit e91ddfae33

View File

@ -36,13 +36,28 @@ class MenuCompilerPass implements CompilerPassInterface
. "container.", MenuComposer::class)); . "container.", MenuComposer::class));
} }
$menuComposerDefinition = $container->getDefinition('chill.main.menu_composer'); $menuComposerDefinition = $container->getDefinition('chill.main.menu_composer');
$services = [];
foreach ($container->findTaggedServiceIds('chill.menu_builder') as $id => $tags) { foreach ($container->findTaggedServiceIds('chill.menu_builder') as $id => $tags) {
$class = $container->getDefinition($id)->getClass(); $services[] = [
'id' => $id,
'priority' => $tags[0]['priority'] ?? 100,
];
}
usort($services, function ($a, $b) {
if ($a['priority'] == $b['priority']) {
return 0;
}
return ($a['priority'] < $b['priority']) ? -1 : 1;
});
foreach ($services as $service) {
$class = $container->getDefinition($service['id'])->getClass();
foreach ($class::getMenuIds() as $menuId) { foreach ($class::getMenuIds() as $menuId) {
$menuComposerDefinition $menuComposerDefinition
->addMethodCall('addLocalMenuBuilder', [new Reference($id), $menuId]); ->addMethodCall('addLocalMenuBuilder', [new Reference($service['id']), $menuId]);
} }
} }
} }