Servicios custom en Drupal

 Los servicios se declaran el archivo my_module.services.yml que se debe encontrar en la raiz de mi modulo custom.

services:

  my_module.servicios_crud:
    class: 'Drupal\nombres\Services\ServiciosService'

  my_module.icecream:
    class: Drupal\nombres\Services\scoopdb
    arguments: ['@database'] //Los argumentos son para declarar otros servicios que
                                deben estar inyectados en el servicio

Dentro de la carpeta de src/Services encontraremos las clases de nuestros servicios.

Ej.Scoopdb.php

<?php

namespace Drupal\my_module\Services;


use Drupal\Core\Database\Connection;
/**
 * Class Scoopdb.
 */
class Scoopdb  {
  /**
   * @var \Drupal\Core\Database\Connection $database
   */
  protected $database;

  /**
   * Constructs a new Scoopdb object.
   * @param \Drupal\Core\Database\Connection $connection
   */
  public function __construct(Connection $connection) {
    $this->database = $connection;
  }

  public function test(){
    return dpm('test');
  }
}

Para inyectar un servicio en un controlador debemos importar el servicio:

use Drupal\nombres\Services\Scoopdb;

Y dentro de la clase principal del controlador debemos instanciar el servicio para poder utilizar sus metodos.

En el contructor debemos llamar al servicio.


protected $database;
protected $scoopdb;

  /**
   * Crea una nueva instancia del controlador.
   *
   * @param \Drupal\Core\Database\Connection $database
   *   La conexión a la base de datos.
   */
  public function __construct(Connection $database, Scoopdb $scoopdb)
  {
    $this->database = $database;
    $this->scoopdb = $scoopdb;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container)
  {
    return new static(
      $container->get('database'),
      $container->get('nombres.icecream'),
    );
  }


Ahora dentro de cualquier metodo llamamos a nuestro servicio:

$instancia = $this->scoopdb;
$resultado = $instancia->cargar();






Comentarios