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