Servicios en Drupal 8: Creando un servicio

Imagen

Drupal 8 utiliza algunos componentes de Symfony internamente, y utilizar Symfony, quiere decir que podemos usar los servicios. Nosotros podemos utilizar los ya existentes o crear un servicio propio para nuestras necesidades. Son muy útiles y fáciles de crear, a si que seguramente nos acostumbremos fácilmente a ellos.

 

Como crear servicios:

La creación es muy sencilla, unicamente tenemos que crear una clase en PHP, e indicarle a Drupal en el archivo modulo.services.yml que esa clase es un servicio, nada mas que eso.

Lo primero, es definir el servicio en el archivo modulo.services.yml de nuestro modulo personalizado. Lo vamos a llamar nireneko.tools, este nombre se utilizara cuando queramos hacer uso de el, y definiremos la clase NirenekoTools:

services:
  nireneko.tools:
    class: Drupal\nireneko\Services\NirenekoTools

Ahora que ya hemos definido nuestro nuevo servicio, vamos a crear la clase que actuara como tal. La clase tendremos que crearla en la ruta "src/Services" y la llamaremos NirenekoTools, dentro tendremos que crear una clase php con un metodo, para este ejemplo sera algo muy simple, unciamente un método, para este ejemplo sera algo muy simple, unicamente un método sin parámetros que repite una palabra.

namespace Drupal\nireneko\Services;

class NirenekoTools {

  /**
   * @return El texto "Nireneko" repetido 10 veces
   */
  public function repetir() {
    return str_repeat('Nireneko ', 10);
  }

}

Listo, con esto ya tenemos nuestro servicio creado, el cual repetirá la palabra "Nireneko" 10 veces cada vez que lo utilicemos. A continuación, podemos ver la estructura final con la que nos hemos quedado.

Estructura de un servicios basico

 

Ampliándolos:

Como se puede ver, crear los servicios es realmente fácil, pero esto es solo lo mas básico y simple. Existen múltiples opciones para definir y configurarlos, estas opciones podemos verlas en la documentación de Drupal.

En próximos artículos veremos como crear servicios mas complejos y como utilizarlos en diferentes tipos de clases, ya que no es lo mismo hacer uso de servicios en los archivos .modulo, que en un controlador o plugin.

 

Artículos relacionados: