2017-10-05 2 views
0

J'ai créé un service pour étendre le menu dans l'admin de Sylius. Il Travaillons bien;) I follow the official docService d'injection Sylius/Symfony 3 dans un service

J'essaie d'injecter le service de routeur, mais j'ai cette erreur suivante:

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

La déclaration de ce service:

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 } 

et la service lui-même:

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

Qu'est-ce qui ne va pas? Merci de votre aide!

+0

Dans votre message d'erreur que vous avez 'XXMenuListener' qui ne correspond pas à votre auditeur nom de la classe? Je suppose que vous l'avez édité dans votre question? Mais dans tous les cas, commencez par supprimer le répertoire cache juste pour l'éliminer comme un problème possible. – Cerad

Répondre

1

Je pense que vous devez effacer le cache si vous n'avez pas aidé à nettoyer le répertoire de cache manuellement. Dans tous les cas, vous n'avez pas besoin d'un service de routeur car menubuilder l'a déjà.

Par exemple:

pour uri

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

pour la route

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

Merci, est la solution;) – darkiron

0

Si vous utilisez autowire à true, vous n'avez pas besoin de spécifier le service de routeur. Quelque chose comme ceci devrait être assez:

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

Dans tous les cas, votre erreur indique que vous n'avez aucun argument. Peut être que c'est un problème de mise en cache ou peut-être vous avez une autre déclaration de service pour la même classe XXX\Menu\AdminMenuListener sans autowire à true et sans arguments.

+0

autowire n'ont aucun effet. Arguments aussi ... Ma pile est bien rangé et propre. Avoir un seul service. – darkiron