Como crear un servicio en Drupal 8 (parte 1)

Cuando se empieza a trabajar con Drupal 8, Symfony o alguna derivada, normalmente toda la cantidad de elementos y nomenclaturas nuevas que nos encontramos suelen asustar o liar al inicio. En esta ocasión vamos a hablar sobre los servicios, que son y como crearlos en Drupal 8.

Que es un servicio?

Muy simple, un servicio es una clase que realiza una tarea, algo util, por ejemplo, una clase que se encarga de enviar emails, guardar logs… Que es lo que no hace un servicio, por ejemplo, definir una estructura de datos, en Drupal puede ser la clase que define la entidad Nodo o la de Usuario. En resumen, un servicio, es un objeto que trabaja para nosotros realizando alguna tarea.

Que es un contenedor de servicios?

Hablando de servicios, es normal que se mencione en algún comento el contenedor de servicios (Service container). Y que es? En Drupal y Symfony, existe un único objeto llamado “container”, que básicamente es un array asociativo que almacena los servicios que cuando le solicitamos un servicio, nos devuelve la clase ya instanciada del servicio que le hemos solicitado.

En drupal 8 prácticamente todo son servicios, La ejecución de las rutas, la lectura de la configuración, la interacción con la cache.

Crear la clase para el servicio.

En un articulo anterior, explicamos como crear un módulos, con una ruta y un controlador, vamos a ampliar ese pequeño modulo añadiéndole un servicio.

Para empezar, podemos ver en el controlador “DrupalerosController” el método “say”, es muy básico, pero supongamos que en lugar de tener solamente una línea que realiza una tarea, tenemos 15.

public function say($count) {
  $response_text = str_repeat('Drupaleros ', $count);
  return new Response($response_text);
}

Si quisieramos reutilizarlo, tendríamos que copiar las 15 líneas en todas partes, y cuando hubiera algún problema, tendríamos que corregirlo en todos lados lo cual es una perdida de tiempo y de esfuerzo, para solucionar esto, vamos a crear una clase que ejecute el código que hemos echo.

Lo primero, para tenerlo organizado, vamos a crear una carpeta llamada “services” dentro de la carpeta src del modulo. Y en esa carpeta una clase llamada “DrupalerosRepeater”, nos quedaría una estructura como la siguiente:

Páginas

Total de votos: 61

Entradas relacionadas

Comentarios (2)

  • Imagen de Jose Leonardo

    Jose Leonardo (no verificado)

    Hola buenas tarde Drupal tiene varios tipos de servicios?

  • Imagen de borja

    borja

    Te refieres a privados y publicos como Symfony? Si que existen, pero los privados no se puede usar directamente.

  • Páginas

Deja un comentario