2017-05-10 1 views
0

Création d'un service qui consigne des informations dans une base de données. Le service doit appeler la Doctrine \ ORM \ EntityManager dans le constuctor, mais je continue à obtenir cette erreur:Injection de dépendance Symfony avec services

Catchable Fatal Error: Argument 1 passed to AppBundle\Service\EmailLoggerManager::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /Users/augustwhitlock/Desktop/symfony/SymfonyRepositories/forms/src/AppBundle/Controller/DefaultController.php on line 45 and defined 

Voici ce que j'ai dans mon dossier de service

namespace AppBundle\Service; 

use Doctrine\ORM\EntityManager; 
use AppBundle\Entity\Logger; 

class EmailLoggerManager 
{ 

private $em; 

public function __construct(EntityManager $em) 
{ 
    $this->em = $em; 
} 

public function logMessageToDatabase($type, $message, $date) 
{ 

    $logger = new Logger(); 
    $logger->setMessageType = $type; 
    $logger->setMessageText = $message; 
    $logger->setMessageDate = $date; 

    $this->em->persist($logger); 
    $this->em->flush(); 

} 

Ce que je comment je m manipulant l'injection de l'EntityManager. À ce stade, je ne fais qu'apprendre le service et essayer différentes choses. Mais cela ne veut pas travailler.

Voici l'édition du DefaultController. J'ajoute les lignes 45 et 46. Il n'y a rien à part la définition de la classe.

$emailLoggerManager = new EmailLoggerManager(); 
    $emailLoggerManager->logMessageToDatabase('Info', 'Hiya', new \DateTime()); 

    return new Response('Message Logged'); 

Le concept derrière la classe est d'utiliser simplement la doctrine au service pour se connecter les choses à la base de données, de compensation mes contrôleurs de devoir être bouché de tout ce code.

+0

Bonjour @ Kaley36, je voudrais voir la ligne 45 du fichier suivant '/ Users/augustwhitlock/Desktop/symfony/SymfonyRepositories/forms/src/AppBundle/Contrôleur/DefaultController.php '. Pouvez-vous éditer votre question et mettre la ligne comment vous appelez vos services. Merci. –

Répondre

0

Vous devez appeler le service du contrôleur comme suit:

$this->get('app.email_logger_manager') 
    ->logMessageToDatabase('Info', 'Hiya', new \DateTime()); 

au lieu d'instancier la classe directement dans le contrôleur.

En outre, il est conseillé de passer le service "@doctrine" au lieu de @ doctrine.orm.entity_manager en raison de la possibilité de fermeture de EntityManager. Le constructeur aurait dû recevoir Doctrine \ Bundle \ DoctrineBundle \ Registry au lieu de Doctrine \ ORM \ EntityManager

+0

Merci beaucoup. J'ai oublié de faire ça. C'est pour votre réponse. Je pense que j'ai codé trop la nuit dernière. – Kaley36