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): ItemInterface
3430 {
35- $menu = $this->factory->createItem('root' );
31+ $menu = $event->getMenu( );
3632
3733 $menu
3834 ->addChild('dashboard', [
@@ -59,14 +55,14 @@ Now you can add submenu items:
5955
6056``` php
6157// ...
62- #[AsDecorator(decorates: 'sylius_admin_ui.knp.menu_builder' )]
63- final readonly class MenuBuilder implements MenuBuilderInterface
58+ #[AsEventListener(MenuBuilder::EVENT_NAME )]
59+ final readonly class MenuListener
6460{
6561 // ...
6662
67- public function createMenu(array $options ): ItemInterface
63+ public function __invoke(MenuBuilderEvent $event ): ItemInterface
6864 {
69- $menu = $this->factory->createItem('root' );
65+ $menu = $event->getMenu( );
7066 // ...
7167 $this->addLibrarySubMenu($menu);
7268
0 commit comments