Soy nuevo en servicios (¡y drupal 8!) Y estoy tratando de descubrir los servicios. Creo que tal vez solo estoy haciendo la creación de una manera anticuada. Lo que quiero hacer es hacer que mi 'generador de hola' sea un servicio y llamarlo en otro controlador con lo siguiente:
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
espacio de nombres 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'
Respuestas:
Hay 3 preguntas aquí:
1. Crear un controlador
1.1 Agregue una clase de controlador : lo hizo. Para otros, consulte la documentación de Drupal
1.2 Agregue un archivo de enrutamiento : parece que falta en su código:
my_module.routing.yml
ver documentación de Drupal
2. Crear un servicio
2.1 Agregue una clase de servicio : lo hizo.
2.2 Agregue un archivo de enrutamiento : lo hizo aunque contiene código adicional que pertenece al archivo de enrutamiento. Esto es todo lo que necesita:
my_module.services.yml
ver documentación de Drupal
3. Use los servicios en un controlador
Lo hiciste. Aquí hay una referencia para otros:
3.1 Anular el
create()
métodoLa clase de controlador hereda este método de
class ControllerBase
. Su función es crear el objeto controlador. Mire el argumento del método: se pasa el contenedor de servicios. Extraiga los servicios que necesita y páselos al constructor:3.2 Inicializar servicios en
__construct()
3.3 Comience a usar los servicios
fuente
create()
método. Supongo que no habría dicho eso, aunque si no hubiera perdido algo más que debería haber sido obvio ... supongo que el servicio hace objetos de conexión de la piscina?