0

これを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

試してみましたが、次のエラーが発生しました: 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>

エラー: 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

4

1 に答える 1

3

XML 形式はどこから取得しましたか? まったく異なる設定のように見えます (たとえば、 にacme.menu_builderAcme\MainBundle\Menu\MenuBuilderyaml と xml にクラスがありAcme\FrontendBundle\Menu\MenuBuilderます。また、acme.menu_builderサービスには yaml に 1 つの引数と xml に 2 つの引数がありますか?

あなたの質問に答えるには、次のようになります。

<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>
于 2013-01-02T13:38:39.857 に答える