Article mis à jour le : 05-05-2022
Comment créer un service et y utiliser Doctrine sous Symfony 2Sous 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.
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.
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]
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;
}
}
}
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!");
}