2017-09-04 2 views
2

J'essaie de consigner des informations avec la bibliothèque Monolog à partir d'une classe personnalisée que j'ai créée, appelée Common.Symfony - Accès au service à partir de la classe personnalisée

J'ai inclus enregistreur comme un argument en service.yml pour cette classe

parameters: 
services: 
    appbundle.helper.common: 
    class: AppBundle\Helpers\Common 
    arguments: ['@doctrine','@logger'] 

J'ai également initialisé l'interface enregistreur pour cette classe.

private $dataEntityManager; 
    private $suppEntityManager; 
    private $curation; 
    private $innerDoctrine; 
    private $logger; 

    /** 
    * Common constructor. 
    * @param ManagerRegistry $doctrine 
    */ 
    public function __construct(ManagerRegistry $doctrine, LoggerInterface $logger) 
    { 
     $this->dataEntityManager = $doctrine->getManager(); 
     $this->suppEntityManager = $doctrine->getManager('gtsupp'); 
     $this->curation = new Curation($doctrine); 
     $this->innerDoctrine = $doctrine; 
     $this->logger = $logger; 
    } 
    public function detail($a, $b, $c, $d, $e, $f = "", $g = true, $h = true) 
    { 

     $this->logger->error('Type not supplied in Common detail ' . __LINE__ . " for descriptor: " . $b); 

    } 

Le problème est que chaque fois que je veux utiliser la classe :: Common je dois fournir l'enregistreur dans le constructeur de classe.

class DefaultController extends Controller 
    { 
     /** 
     * @Route("/", name="homepage") 
     */ 
     public function indexAction(Request $request) 
     { 
      $common = new Common($this->getDoctrine(), $this->get('logger')); 
      $common->detail('a', 'b', 'c', 'd', 'e'); 

      return $this->render('default/index.html.twig', [ 
       'base_dir' => realpath($this->getParameter('kernel.root_dir') . '/..') . DIRECTORY_SEPARATOR, 
      ]); 
     } 
    } 

P.S. Même problème avec la doctrine. Je dois le passer chaque fois que j'appelle la classe commune comme vous pouvez le voir ci-dessus.

+0

Si vous tirez du récipient comme la réponse ci-dessous s Uggtsts est le moyen de l'héritage. Si vous utilisez S3.3 + alors essayez la fonction publique indexAction (Requête $ request, Common $ common) – Cerad

Répondre

1

Modifier ceci:

$common = new Common($this->getDoctrine(), $this->get('logger')); 

à ceci:

$common = this->get('appbundle.helper.common'); 

Dans votre chemin vous n'êtes pas en utilisant l'injection de dépendance, de la bonne façon, vous ne avez pas besoin de passer tous les paramètres à instancier Service

https://symfony.com/doc/current/components/dependency_injection.html

+0

Merci beaucoup. Pourriez-vous s'il vous plaît me fournir la documentation à côté de cela? Je ne l'ai jamais trouvé. – marioskamperis

+1

https://symfony.com/doc/current/components/dependency_injection.html @marioskamperis heureux de vous aider! –