2017-10-05 93 views
0

我創建了一個服務來擴展Sylius的管理中的菜單。它工作得很好;) I follow the official docSylius/Symfony 3在服務中注入服務

我嘗試注入路由器服務,但我這個以下錯誤:

Type error: Too few arguments to function XXMenuListener::__construct(), 0 passed in appDevDebugProjectContainer.php on line 1542 and exactly 1 expected

這項服務的聲明:

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')) 
     ; 
    } 
} 

有什麼問題?謝謝你的幫助!

+0

在您的錯誤信息,你有 'XXMenuListener',這不符合您的監聽器類的名字嗎?我懷疑你在你的問題中編輯它?但無論如何,從刪除緩存目錄開始,將其作爲可能的問題消除。 – Cerad

回答

1

我想你需要清除緩存,如果沒有幫助手動清理緩存目錄。 無論如何,你不需要路由器服務,因爲menubuilder已經擁有了它。

例如:

的URI

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

路線

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

謝謝,是解決方案;) – darkiron

0

如果您使用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 } 

無論如何,你的錯誤表明你沒有任何參數。可能是緩存問題,也可能是您沒有自動導入爲true並且沒有參數的情況下爲同一類XXX\Menu\AdminMenuListener提供另一個服務聲明。

+0

autowire沒有影響。爭論也...我的堆棧整潔乾淨。只有一項服務。 – darkiron