Skip to main content

Si vous avez pour habitude d'utiliser un ORM s'inspirant du design pattern "active record" et que vous passez à Symfony 3, vous serez surpris que vous ne pourrez pas utiliser un service (le logger par exemple) dans une entité.
En effet, on ne peut rien trouver d'autre que les attributs et la couche métier dans les entités de Symfony 3.
Afin de pouvoir utiliser un service et d'éviter de devoir se répéter à chaque action du controller, il faudra créer un service (dans lequel on a accès aux autres services).

Pour commencer il faut définir ce service dans le fichier services.yml qui se trouve dans le répertoire app/config :

services:
     submission_file_saver:
        class: AppBundle\Service\SubmissionFileSaver
        arguments: ["@logger"]

Ici nous déclarons le service "SubmissionFileSaver" et on désire lui injecter le service "logger".

Nous créons notre classe "SubmissionFileSaver" et celle-ci aura le constructeur suivant :

public function __construct(LoggerInterface $logger)
  {
    $this->logger = $logger;
  }

Nous y ajoutons une ou des méthodes qui utiliserons ce service :

public function saveFiles($submission, $prefix = null) {
    try {
      //sauvegarde du fichier avec les données de $submission
    } catch (\Exception $exception) {
      $this->logger->error($exception->getMessage());
    }
  }

Voilà, nous n'avons plus qu'à injecter et utiliser ce service dans nos actions de notre controller :

public function registerAction(Request $request, SubmissionFileSaver $file_saver)
{
    $submission = new Submission();
    ...

    $file_saver->saveFiles($submission, $prefix);
    ...
    
}

Discutons de votre projet

Contactez-nous

  •  + 32 (0) 10 49 51 00
  •  info@expert-it.com