Motivación:
El problema que debía resolver consistía en crear una página de administración siguiendo la forma que Drupal utiliza para mostrar paginas como son admin/structure o admin/reports, es decir que refleje los links de un menú de administración.
Como lo resolví:
Todo se resume a los archivos module_name.routing.yml y module_name.links.menu.yml definidos dentro de un modulo custom.
Empezemos por lo que necesitamos definir en el archivo de routing.
Este es mi informes.routing.yml
project_informes.admin:
path: admin/project/informes
defaults:
_controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
_title: 'Informes'
requirements:
_permission: 'generar informes'
project_informes.cultivos:
path: admin/project/informes/cultivos
defaults:
_form: '\Drupal\project_informes\Form\InformeCultivoForm'
_title: 'Generar Informe'
requirements:
_permission: 'access content'
project_informes.plagas:
path: admin/project/informes/plagas
defaults:
_form: '\Drupal\project_informes\Form\InformePlagaForm'
_title: 'Generar Informe de certificación'
requirements:
_permission: 'access content'
project_informes.inspeccion:
path: admin/project/informes/inspeccion
defaults:
_form: '\Drupal\project_informes\Form\InformeInspeccionForm'
_title: 'Generar Informe de inspeccion'
requirements:
_permission: 'access content'
Este archivo contiene las rutas definidas que llevan, en mi caso, a tres formularios y una ruta project_informes.admin que define el path que será donde se muestre esta pagina de administración y llama a un controller (acá esta la magia)
_controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
Este controller pertenece al modulo system del core de drupal y es el que se ocupa de convertir los los links de un menú y mostrarlos de esa forma particular.
Y la pregunta que surge es ¿Y cuales son los links que se van a mostrar?
Acá es donde entra a jugar el otro archivo que mencioné al inicio, en mi caso, informes.links.menu.yml.
informes.admin:
title: 'Informes'
description: 'Admin informes'
parent: project_core.admin
route_name: project_informes.admin
weight: 80
informes.cultivo:
title: 'Cultivos'
description: 'Informes fitosanitarios de cultivos.'
parent: informes.admin
route_name: project_informes.cultivos
weight: 10
informes.plagas:
title: 'Plagas'
description: 'Informes fitosanitarios de plagas.'
parent: informes.admin
route_name: project_informes.plagas
weight: 20
informes.inspeccion:
title: 'Inspeccion'
description: 'Informes para inspeccion.'
parent: informes.admin
route_name: project_informes.inspeccion
weight: 30
Algo a tener en cuenta en la definición de este archivo es que se debe usar siempre la propiedad route_name para definir el destino o la referencia del link. Drupal permite también que se utilice la propiedad url para definir la referencia del link pero si queremos generar una pagina de administración si o si debemos usar la propiedad route_name.
Estos links de menú se ven de esta forma en el menú de administración.
Ahora sí, ya tenemos todo definido, los links del menu que son hijos de Informes y la ruta project_informes.admin que llama al controller SystemController::systemAdminMenuBlockPage.
Entonces accedemos al path admin/project/informes y vamos a encontrar la página de administración