Reputation: 1508
how to write this in XML?
# src/Acme/MainBundle/Resources/config/services.yml
services:
acme_main.menu_builder:
class: Acme\MainBundle\Menu\MenuBuilder
arguments: ["@knp_menu.factory"]
acme_main.menu.main:
class: Knp\Menu\MenuItem # the service definition requires setting the class
factory_service: acme_main.menu_builder
factory_method: createMainMenu
arguments: ["@request"]
scope: request # needed as we have the request as a dependency here
tags:
- { name: knp_menu.menu, alias: main } # The alias is what is used to retrieve the menu
I have tried it but getting the next error: xml:
<!-- Knp Menu -->
<service id="acme.menu_builder" class="Acme\FrontendBundle\Menu\MenuBuilder">
<argument type="service" id="knp_menu.factory" />
<argument type="service" id="security.context" />
</service>
<service id="acme.menu.main" class="Acme\Menu\MenuItem" scope="request">
<argument type="service" id="acme_menu.menu_builder" />
<argument type="service" id="request" />
<tag name="knp_menu.menu" alias="main" method="createMainMenu" />
</service>
error:
ErrorException: Catchable Fatal Error: Argument 2 passed to Knp\Menu\MenuItem::__construct() must implement interface Knp\Menu\FactoryInterface, instance of Symfony\Component\HttpFoundation\Request given
Upvotes: 0
Views: 1312
Reputation: 41934
Where did you get the XML format from? It looks like some completely different setting (for instance, the acme.menu_builder
has the Acme\MainBundle\Menu\MenuBuilder
class in yaml and the Acme\FrontendBundle\Menu\MenuBuilder
in xml. And the acme.menu_builder
service has 1 argument in yaml and 2 in xml?
To answer your question, it should look something like this:
<services>
<service id="acme_main.menu_builder"
class="Acme\MainBundle\Menu\MenuBuilder"
>
<argument type="service" id="knp_menu.factory" />
</service>
<service id="acme_main.menu.main"
class="Knp\Menu\MenuItem"
factory-service="acme_main.menu_builder"
factory-method="createMainMenu"
scope="request"
>
<argument type="service" id="request" />
<tag name="knp_menu.menu" alias="main" />
</service>
</services>
Upvotes: 3