Les services Symfony
Un service Symfony est simplement une classe. Le choix de la création d'un service peut s'avérer utile quand il est nécessaire d'organiser des fonctionnalités. Les services sont rangés dans un conteneur accessible facilement dans les controlleurs.
Créer un simple service
Dans votre bundle, créez le dossier Services
puis dans ce
dossier, créez un fichier PHP (nous le nommerons Utils.php
dans notre exemple)
namespace ENGEL\AwesomeBundle\Services; class Utils { public function getIp() { return "0.0.0.0"; } }
Ensuite consultez le dossier DependencyInjection
dans votre bundle
et ouvrez le fichier BundleExtension
, dans notre cas il se nomme:
ENGELAwesomeBundleExtension.php
Assurez-vous de la présence des lignes de code:
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yml');
Ensuite éditez le fichier Resources/config/services.yml
de votre bundle:
services: utils: class: ENGEL\AwesomeBundle\Services\Utils
Voila, nous avons indiqué à Symfony que notre classe Utils est un service
Nous pouvons maintenant appeler ce service depuis n'importe quel controlleur:
class MyController extends Controller { public function indexAction() { $utils = $this->container->get('utils'); return array( 'ip' => $utils->getIp() ); } }
Les arguments
Vous pouvez bien évidemment passer des paramètres comme ceci:
namespace ENGEL\AwesomeBundle\Services; class Utils { public function getIp($ip) { return $ip; } }
class MyController extends Controller { public function indexAction() { $utils = $this->container->get('utils'); return array( 'ip' => $utils->getIp("0.0.0.1") ); } }
Utiliser un service dans un service
Pour utiliser un service dans un service on peut utiliser l'injection de dépendances
namespace ENGEL\MeetGeekBundle\Services; class Utils { public function __construct($noutils) { $this->noutils = $noutils; } public function getIp($ip) { return $this->noutils->getName(); } } class NoUtils { public function getName() { return "Olivier ENGEL"; } }
services: utils: class: ENGEL\MeetGeekBundle\Services\Utils arguments: [@noutils] noutils: class: ENGEL\MeetGeekBundle\Services\NoUtils
Crée votre site web au meilleur prix💰