Je suis nouveau dans les services (et drupal 8!) Et j'essaie de comprendre les services. Je pense que je fais peut-être juste la création d'une manière dépassée. Ce que je veux faire, c'est faire de mon 'bonjour générateur' un service et l'appeler dans un autre contrôleur avec ce qui suit:
DBController.php
namespace Drupal\db\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\db\DbServices\HelloGenerator;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Response;
class DBController extends ControllerBase
{
private $helloGenerator;
public function __construct(HelloGenerator $x) {
$this->helloGenerator = $x;
}
public function say($count) {
$hello = $this->helloGenerator->getHello($count);
return new Response($hello);
}
public static function create(ContainerInterface $container) {
$x = $container->get('db.hello_generator');
return new static ($x);
}
}
HellGenerator.php
espace de noms Drupal \ db \ DbServices;
class HelloGenerator {
public function getHello($count) {
$foo = 4 + 4 + 4;
return $foo . ' ' . $count;
}
}
db.services.yml
services:
db.hello_generator:
class: Drupal\db\DbServices\HelloGenerator
db.db_says:
path: /db/says/{count}
defaults:
_controller: '\Drupal\db\Controller\DBController::say'
requirements:
_permission: 'access content'
Réponses:
Il y a 3 questions ici:
1. Créez un contrôleur
1.1 Ajoutez une classe de contrôleur - vous l'avez fait. Pour les autres, voir la documentation Drupal
1.2 Ajoutez un fichier de routage - il semble que cela manque dans votre code:
my_module.routing.yml
voir la documentation Drupal
2. Créez un service
2.1 Ajoutez une classe de service - vous l'avez fait.
2.2 Ajoutez un fichier de routage - vous l'avez fait bien qu'il contienne du code supplémentaire qui appartient au fichier de routage. C'est tout ce dont vous avez besoin:
my_module.services.yml
voir la documentation Drupal
3. Utiliser des services dans un contrôleur
Tu l'as fait. Voici une référence pour les autres:
3.1 Remplacer la
create()
méthodeLa classe contrôleur hérite de cette méthode
class ControllerBase
. Son rôle est de créer l'objet contrôleur. Regardez l'argument de la méthode: il est passé le conteneur de services. Extrayez les services dont vous avez besoin et transmettez-les au constructeur:3.2 Initialiser les services dans
__construct()
3.3 Commencez à utiliser les services
la source
create()
méthode. Je suppose que vous ne l' auriez pas dit que si si je ne l' avais pas manqué quelque chose d' autre qui aurait dû être évident ... Je suppose que le service fait des objets de connexion de la piscine?