1010
1111</div >
1212
13- To customize the admin menu, you need to decorate the ` sylius_admin_ui.knp.menu_builder `  service.
13+ To customize the admin menu, you need to listen for the ` sylius_admin_ui.menu.event.main `  event. This way, you can implement
14+ multiple listeners e.g. in different bounded contexts of your application.
1415
1516``` php 
1617declare(strict_types=1);
1718
1819namespace App\Menu;
1920
20- use Knp\Menu\FactoryInterface;
2121use Knp\Menu\ItemInterface;
22- use Sylius\AdminUi\Knp\Menu\MenuBuilderInterface;
23- use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
22+ use Sylius\AdminUi\Knp\Menu\Event\MenuBuilderEvent;
23+ use Sylius\AdminUi\Knp\Menu\MenuBuilder;
24+ use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
2425
25- #[AsDecorator(decorates: 'sylius_admin_ui.knp.menu_builder' )]
26- final readonly class MenuBuilder implements MenuBuilderInterface 
26+ #[AsEventListener(MenuBuilder::EVENT_NAME )]
27+ final readonly class MenuListener 
2728{
28-     public function __construct(
29-         private readonly FactoryInterface $factory,
30-     ) {
31-     }
32- 
33-     public function createMenu(array $options): ItemInterface
29+     public function __invoke(MenuBuilderEvent $event): void
3430    {
35-         $menu = $this->factory->createItem('root' );
31+         $menu = $event->getMenu( );
3632
3733        $menu
3834            ->addChild('dashboard', [
@@ -41,8 +37,6 @@ final readonly class MenuBuilder implements MenuBuilderInterface
4137            ->setLabel('sylius.ui.dashboard')
4238            ->setLabelAttribute('icon', 'tabler:dashboard')
4339        ;
44- 
45-         return $menu;
4640    }
4741}
4842``` 
@@ -59,18 +53,16 @@ Now you can add submenu items:
5953
6054``` php 
6155// ...
62- #[AsDecorator(decorates: 'sylius_admin_ui.knp.menu_builder' )]
63- final readonly class MenuBuilder implements MenuBuilderInterface 
56+ #[AsEventListener(MenuBuilder::EVENT_NAME )]
57+ final readonly class MenuListener 
6458{
6559    // ...
6660
67-     public function createMenu(array $options ): ItemInterface 
61+     public function __invoke(MenuBuilderEvent $event ): void 
6862    {
69-         $menu = $this->factory->createItem('root' );
63+         $menu = $event->getMenu( );
7064        // ...
7165        $this->addLibrarySubMenu($menu);
72- 
73-         return $menu;
7466    }
7567
7668    private function addLibrarySubMenu(ItemInterface $menu): void
0 commit comments