Crear una página desde un módulo para Drupal 8

El código de Drupal 8 es diferente del de versiones anteriores. Se han adoptado conceptos y estandares modernos, la programación es ahora mayoritariamente orientada a objetos y se usan componentes de Symfony. 
 
Ahora crear un módulo, una página o un bloque es totalmente diferente. Mi intención con esta serie de artículos es mostrar como se hace ahora para facilitaros el paso a esta nueva versión que vale mucho la pena.
Puedes leer otros artículos de esta serie:
 

Crear la ruta de la página

 
Volvemos a la carpeta del módulo `modules/hello_drupal` y creamos un nuevo archivo llamado `hello_drupal.routing.yml`. Éste será el encargado de decirle a Drupal que debe hacer cuando el usuario acceda a una ruta concreta. Su contenido será el siguiente:
 
    hello_drupal.content:
      path: '/hello'
      defaults:
        _controller: '\Drupal\hello_drupal\Controller\HelloController::content'
        _title: 'Hello Drupal'
      requirements:
        _permission: 'access content'

Lo analizaremos línea a línea:

 
  1. La primera línea declara un nuevo objeto que tiene por nombre el identificador de nuestra ruta. `hello_drupal.content` es el "nombre máquina" de nuestra página y servirá para identificarla en el código después.
  2. La variable `path` le dice a Drupal cual es la ruta que estamos creando, en nuestro caso `/hello`.
  3. El objeto `defaults` declara propiedades por defecto de nuestra ruta:
    • La variable `_controller` contiene el nombre de la función que devolverá el contenido de la página.
    • La variable `_title` contiene el título de la página.
  4. El objeto `requirements` contiene variables que controlan el acceso a la página. En nuestro caso solo hay uno: `permission`, que tiene por valor el nombre de un permiso que el usuario debe tener para poder acceder a la página.

 

Crear el controlador de la página

 
Le hemos dicho a Drupal que si alguien accede a `/hello` debe ejecutar la función `content` de la clase `\Drupal\hello_drupal\Controller\HelloController`. Para que Drupal pueda encontrar nuestra clase está debe seguir el estandar PSR-4. Ésto se traduce en que debe estar, dentro de la carpeta del módulo en `src/Controller` y llamarse `HelloController.php`. Su contenido serà el siguiente:
 
<?php
    /**
     * @file
     * Contains \Drupal\hello_drupal\Controller\HelloController.
     */

    namespace Drupal\hello_drupal\Controller;

    use Drupal\Core\Controller\ControllerBase;

    class HelloController extends ControllerBase {
      public function content() {
        return array(
            '#type' => 'markup',
            '#markup' => $this->t('Hello, Drupal!'),
        );
      }
    }

 

 
Lo analizaremos también línea a línea:
 
  1. Las primeras lineas contienen un comentario que describe el contenido del archivo, la clase que nos ocupa.
  2. La declaración `namespace` le dice a PHP que estamos trabajando en ese espacio de nombres.
  3. La declaración `use` le dice a PHP que posteriormente haremos uso de la clase `ControllerBase`. Esto es simplemente permite utilizar directamente el nombre de la clase son su espacio de nombres.
  4. La declaració `class` declara la clase `HelloController` que extiende `ControllerBase`.
  5. En la siguiente linea se declara la funcion publica `content` que es la encargada de devolver el contenido de la página, en nuestro caso un "render array" con el texto traducido "Hello, Drupal!"
 

Visitar la página

 
Ya está todo listo para visitar nuestra página. Si el módulo ya estaba activo deberemos limpiar el "cache" de Drupal sino deberemos activarlo; hechoe esto, acudiremos a la dirección "hello".
 

Contacto

¿Te interesan nuestros servicios?

Contáctanos