Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Symfony 2 : créer un service utilisant Doctrine

Article posté le 07-04-2015 dans la catégorie PHP

Sous Symfony 2, créer un service permet notamment de factoriser du code que l'on voudra utiliser  à plusieurs endroits. Voici comment faire, avec en bonus, comment y utiliser Doctrine.

Symfony 2

Le but de mon service étant de vérifier l'existence d'une catégorie dans la base de données. Si la catégorie existe, on retournera l'entité de la catégorie en question, par contre si elle n'existe pas, on retournera false.

1- Déclarer le service

Notre service s'appelle 'outils_categorie'. Il est le deuxième service de mon bundle, et vous remarquerez que je lui envoie en paramètre une instance d'un autre service : l'entity manager de Doctrine.

Ainsi, dans mon fichier config/services.yml, voici ce que l'on trouve :

services:
    validateur_formulaire:
        class: Eric\MultimediaBundle\Outils\ListeErreursFormulaire
    outils_categorie:
        class: Eric\MultimediaBundle\Outils\Categorie
        arguments: [@doctrine.orm.entity_manager]

 

2- Le contenu du service

Voici le contenu du service :

<?php
namespace Eric\Multimedia\Bundle_Outils; //Très important : votre namespace!
class Categorie { //Une classe, ni plus ni moins
    
    
private $em = null;
    
    public function __construct(
Doctrine\ORM\EntityManager $em) { //Son constructeur avec l'entity manager en paramètre
        $this->em = $em;
    }
    
    public function verifExistance($SLUG) { // Et la méthode publique de mon service (il pourrait y en avoir d'autres)
        
        $queryCategories = $this->em->createQuery(
            "SELECT c FROM VideoBundle:Categorie c WHERE c.url = :categ"
        )->setParameter('categ', $SLUG);
        
        try {
            $theCateg = $queryCategories->getSingleResult();
            return $theCateg;
        } catch(DoctrineORMNoResultException $e) {
            return false;
        }
        
    }
    
}

 

3- Appeler le service depuis un contrôleur 

Rien de très compliqué :

$test = $this->get('outils_categorie'); //Appel du service
            if($test->verifExistance($LaNouvelleCategorie->getUrl())){ //Utilisation d'une de ses méthodes
                throw $this->createNotFoundException("La catégorie existe déja!");
            }

 


Tweet
comments powered by Disqus