[英]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')
;
如果將autowire
為true
,則無需指定路由器服務。 像這樣的東西就足夠了:
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.