Créer un service Symfony
Pour créer un service, il faut suivre les étapes suivantes.Il faut tout d'abord créer un fichier qui contiendra une classe qui sera votre service. Ce fichier, vous pouvez le créer où vous le voulez, dans un bundle réservé pour lui, dans un de vos bundles existant, peu importe. Pour ma part, je le crée dans
src/AppBundle/Services/MyService.php
et j'y insère le code suivant :<?php
namespace AppBundle\Services;
class MyService
{
/**
* Retourne "true" si le premier argument fait plus de 10 caractères
*
* @param string $argument
* @return bool
*/
public function myFunction($argument) {
return strlen($text) > 10;
}
}
Je n'oublie pas de respecter la convention de Symfony à propos des namespaces (la norme PSR-0) qui stipule que le namespace doit correspondre au chemin du fichier. Par exemple, si le fichier se trouve dans src/AppBundle/Services/MyService.php
, alors mon namespace doit être AppBundle\Services
.Ensuite, créez le fichier
src/AppBundle/Resources/config/services.yml
et mettez-y le code suivant :services:
nom.de.mon.service:
class: Namespace\de\ma\classe\MaClasse
Pour nous, ça sera :services:
app_bundle.my_service:
class: AppBundle\Services\MyService
Plus qu'à l'utiliser dans nos contrôleurs :
<?php
// src/AppBundle/Controller/MyController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class MyController extends Controller
{
public function myAction(Request $request)
{
// On récupère le service
$my_service = $this->container->get('app_bundle.my_service');
// Et on l'utilise
$texte = 'Mon petit texte';
if ($my_service->myFunction($texte)) {
// $texte fait plus de 10 caractères
}
}
}
Commandes qui peut servir : Avoir la liste des services de son application :
php bin/console debug:container
Passer des arguments à ses services
Pour passer des arguments à ses services, c'est comme ceci :Dans le fichier
src/AppBundle/Resources/config/services.yml
:services:
app_bundle.my_service:
class: AppBundle\Services\MyService
arguments:
- "@mailer" # Un autre service, précédé d'un @
- %locale% # Un paramètre, entouré de %
- 50 # Une valeur toute bête, un nombre, un string, ou n'importe nawak !
Et dans le fichier src/AppBundle/Controller/MyController.php
:<?php
namespace AppBundle\Services;
class MyService
{
private $mailer;
private $locale;
private $number;
public function __construct(\Swift_Mailer $mailer, $locale, $number)
{
$this->mailer = $mailer;
$this->locale = $locale;
$this->number= (int) $number;
}
/**
* Retourne "true" si le premier argument fait plus de 10 caractères
*
* @param string $argument
* @return bool
*/
public function myFunction($argument) {
return strlen($text) > 10;
}
}
Une erreur ? une question ? une critique ? une faute ? un conseil ? ou tout simplement un merci ?
Lâche ton commentaire
taz59 Le lundi 27 juillet 2020 à 17:42:33
merci beaucoup pour cette revision
merci beaucoup pour cette revision