Creación de una página en un módulo de Drupal de forma programática
Hay dos pasos para crear una página simple en Drupal:
Declare la ruta y sus parámetros.
Este paso incluye el título de la página, los requisitos de acceso a la página, etc.
En Drupal 7 debías implementar hook_menu().
En Drupal 8, crea un archivo
Escribe el código para devolver el contenido de la página.
En Drupal 7 debías escribir una función callback para la página definida en hook_menu().
En Drupal 8, el callback de la página debe ser un método de clase o un servicio registrado. Puede variar según diferentes condiciones (HTTP o HTTPS, encabezados de contenido, etc.), pero esto está fuera del alcance de esta introducción.
Resumen
Siguiendo el ejemplo en esta página, podrás crear una página simple en tu módulo personalizado sin conocer demasiado los detalles internos de Drupal. Para más información, consulta Registro de cambios sobre la nueva arquitectura de rutas y varias implementaciones en el núcleo y proyectos de ejemplo.
Archivo YAML de rutas para el módulo de ejemplo
La información de rutas se almacena en example/example.routing.yml:
example.my_page: path: '/mypage/page' defaults: _controller: '\Drupal\example\Controller\ExampleController::myPage' _title: 'My first page in D8' requirements: _permission: 'access content'
example.my_page
- Es el nombre máquina de la ruta. Por convención, los nombres máquinas de rutas deben ser module_name.sub_name. Cuando otras partes del código necesiten referirse a la ruta, usarán este nombre máquina.
path
- Indica la URL para la página en tu sitio. Observa la barra diagonal inicial (/).
defaults
- Describe el callback de la página y el título. @todo: ¿Dónde pueden sobrescribirse estos valores por defecto?
requirements
- Define las condiciones bajo las cuales la página será accesible. Puedes indicar permisos, módulos habilitados u otras condiciones.
Implementación de la página para el módulo de ejemplo
La clase controlador ExampleController debe definirse en example/src/Controller/ExampleController.php:
<?php namespace Drupal\example\Controller; use Drupal\Core\Controller\ControllerBase; /** * Provee respuestas de rutas para el módulo Example. */ class ExampleController extends ControllerBase { /** * Retorna una página simple. * * @return array * Un array renderizable simple. */ public function myPage() { $element = array( '#markup' => 'Hello, world', ); return $element; } }
namespace (espacio de nombres)
- Aquí se declara el prefijo necesario para la definición completa del nombre de clase que definimos. Compara el bloque de documentación y el nombre de la clase. El autoloader sabe que para encontrar la clase \Drupal\example\Controller\ExampleController debe buscar el archivo modules/example/src/Controller/ExampleController.php.
use
- Nos permite usar ControllerBase en lugar del nombre completo, haciendo que la línea de definición de clase sea mucho más legible.
myPage()
- El método indicado en el archivo YAML debe ser público y debe retornar un array renderizable.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.