簡體   English   中英

Sylius / Symfony 3在服務中注入服務

[英]Sylius/Symfony 3 inject service in a service

我創建了一個服務來擴展Sylius管理員的菜單。 運行良好;) 我遵循官方文檔

我嘗試注入路由器服務,但是出現以下錯誤:

類型錯誤:函數XXMenuListener :: __ construct()的參數太少,在1542行的appDevDebugProjectContainer.php中傳遞了0,並且正好是1

這項服務的聲明:

services:
    app.listener.admin.menu_builder:
        class: XXX\Menu\AdminMenuListener
        autowire: true
        arguments:
            - '@router'
        tags:
            - { name: kernel.event_listener, event: sylius.menu.admin.main, method: addAdminMenuItems }

服務本身:

<?php

namespace XXX\Menu;

use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
use Symfony\Bundle\FrameworkBundle\Routing\Router;

final class AdminMenuListener
{

    private $router;

    public function __construct(Router $router){
        $this->router = $router;
    }


    /**
     * @param MenuBuilderEvent $event

     */
    public function addAdminMenuItems(MenuBuilderEvent $event){
        $menu = $event->getMenu();

        $newSubmenu = $menu
            ->addChild('new')
            ->setLabel('XXX')
        ;

        $newSubmenu
            ->addChild('new-subitem')
            ->setLabel('XXX')
            //->setUri('https://www.google.com');
            ->setUri($this->router->generate('foo'))
        ;
    }
}

有什么問題嗎? 謝謝你的幫助!

我認為,如果不幫助手動清除緩存目錄,則需要清除緩存。 無論如何,您都不需要路由器服務,因為menubuilder已經具備了。

例如:

對於uri

$newSubmenu
   ->addChild('new-subitem')
   ->setLabel('XXX')
   ->setUri('https://www.google.com')
;

路線

$newSubmenu
   ->addChild('new-subitem', ['route' => 'foo'])
   ->setLabel('XXX')
;

如果將autowiretrue ,則無需指定路由器服務。 像這樣的東西就足夠了:

services:
    app.listener.admin.menu_builder:
        class: XXX\Menu\AdminMenuListener
        autowire: true
        tags:
            - { name: kernel.event_listener, event: sylius.menu.admin.main, method: addAdminMenuItems }

無論如何,您的錯誤都表明您沒有任何參數。 可能是緩存問題,或者您是同一類XXX\\Menu\\AdminMenuListener另一個服務聲明,而沒有自動裝配為true且沒有參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM