Comenzando - Información de referencia (Drupal 8)
Drupal 8 utiliza una serie de funciones avanzadas del lenguaje PHP y complejas librerías externas para proporcionar a los desarrolladores externos la API más avanzada de todos los CMS disponibles. Aunque los desarrolladores experimentados de Drupal 7 pueden notar algunos cambios significativos, la mayor parte de la estructura básica les resultará familiar.
Si alguno de los materiales presentados durante esta guía paso a paso para desarrolladores de módulos D8 te resulta nuevo, el siguiente contenido puede ayudarte. Sin embargo, no se requieren conocimientos exhaustivos para avanzar hacia la descripción del módulo D8.
Programación orientada a objetos
La POO, aunque inicialmente intimidante, se ha consolidado como la mejor manera.
Para una visión general de las mejores prácticas en PHP, lee phptherightway.com. Drupal no utiliza todas las herramientas y métodos documentados allí, pero es una excelente introducción a PHP y muchas de sus características.
Actualiza tus conocimientos de POO leyendo la documentación oficial de PHP sobre clases y objetos, así como algunos de estos buenos tutoriales:
- POO en PHP en todo su esplendor
- Programación orientada a objetos (en Wikipedia)
- Programación orientada a objetos en PHP para principiantes (en tuts+)
- Conceptos de programación orientada a objetos (en tutorialspoint.com)
- Programación orientada a objetos en PHP (en phpro.org)
- Programación orientada a objetos en PHP (en youtube.com)
- Fundamentos de programación: diseño orientado a objetos (en lynda.com)
- 12 conceptos esenciales de POO en PHP que debes conocer
- Curso de POO en SymfonyCasts (antes KNP university)
Drupal 8 también utiliza algunos patrones comunes de diseño, y querrás asegurarte de tener una idea general sobre ellos:
Patrón Factory y enlaces estáticos tardíos
Patrones de diseño de software (en Wikipedia)
Fundamentos de programación: patrones de diseño (en lynda.com)
@todo: añadir enlaces adicionales a documentación sobre patrones que usamos...
Espacios de nombres en PHP
Si no estás familiarizado con el concepto de espacio de nombres en PHP, prueba algunos de estos artículos:
- Cómo usar espacios de nombres en PHP.
- PHP: espacios de nombres
- Video sobre espacios de nombres en PHP.
- Explicación de espacios de nombres en PHP (por Dayle Rees)
- Espacios de nombres en PHP (en tuts+)
En la mayoría de los casos, el código de Drupal tiene espacios de nombres basados en el módulo al que pertenece.
Ejemplo: espacio de nombres para block.module
namespace Drupal\block;
@todo: explicar por qué a veces es Drupal\, y a veces Drupal\\[Controller|Form|Plugin|etc.] y cómo saber cuál usar...
Aprende más sobre los estándares de espacios de nombres en Drupal. Más información sobre el uso de PSR-4 en Drupal aquí. El software de codificación correctamente configurado debería poder reconocer espacios de nombres PHP y proporcionar ayuda y autocompletado.
Inyección de dependencias
Aunque la inyección de dependencias es en realidad otro patrón de diseño OOP, lo mencionamos aquí porque Drupal 8 usa intensivamente este concepto, y es importante tener una comprensión básica para acceder y usar muchas de las API principales.
Lee sobre inyección de dependencias en PHP, así como otros artículos en esa página. Especialmente este artículo, ya que Drupal usa intensamente el contenedor de servicios Symfony al que hace referencia.
Consulta también:
Symfony
Symfony es un framework PHP del que Drupal se ha servido para reducir la duplicación de código en diversos proyectos PHP. Gran parte del código que Drupal 8 usa para gestionar rutas, sesiones y el contenedor de servicios, entre otros, proviene de Symfony 2 (y a medida que Drupal 8 evolucionó, se movió hacia Symfony 3). Si quieres saber más sobre por qué se tomó esta decisión, revisa esta presentación del principal contribuyente alexpott.
Consulta el libro de Symfony 2 y refresca tus conocimientos de Symfony. Aunque no es necesario para entender Drupal completamente, saber cómo funciona Symfony te convertirá en un mejor desarrollador Drupal y un mejor desarrollador PHP. También puede interesarte el glosario de Symfony.
Consulta el archivo core/composer.lock para ver las librerías de Symfony. A partir de Drupal 8.6.15 estas son las librerías Symfony PHP y relacionadas:
...
"symfony/class-loader": "~3.4.0",
"symfony/console": "~3.4.0",
"symfony/dependency-injection": "~3.4.26",
"symfony/event-dispatcher": "~3.4.0",
"symfony/http-foundation": "~3.4.26",
"symfony/http-kernel": "~3.4.14",
"symfony/routing": "~3.4.0",
"symfony/serializer": "~3.4.0",
"symfony/translation": "~3.4.0",
"symfony/validator": "~3.4.0",
"symfony/process": "~3.4.0",
"symfony/polyfill-iconv": "^1.0",
"symfony/yaml": "~3.4.5",
"twig/twig": "^1.38.2",
"doctrine/common": "^2.5",
"doctrine/annotations": "^1.2",
...
Anotaciones
Drupal 8 usa anotaciones PHP —comentarios @docblock añadidos a tu código con una sintaxis especial— para descubrir plugins y para proporcionar contexto/metadatos adicionales al código que se ejecuta. Las anotaciones se leen usando el analizador de anotaciones Doctrine (v.1.6.), y luego se convierten en información que Drupal puede usar para comprender mejor lo que hace tu código.
Aprende más sobre el uso de anotaciones para descubrir plugins.
Consulta el listado de todos los tipos de anotaciones en Drupal 8.
Consulta también: PHPDoc (en Wikipedia)
Plugins
Los plugins proporcionan funcionalidades pequeñas de forma que puedan ser fácilmente reemplazadas por otro plugin. Los plugins que realizan funcionalidades similares pertenecen al mismo tipo. Por ejemplo, “Widget de campo” es un tipo de plugin, y cada widget de campo específico (por ejemplo, campo de texto, campo de fecha, etc.) se implementa con un plugin.
Aprende más sobre el API de plugins en Drupal 8.
Servicios
En Drupal 8, un servicio es cualquier objeto gestionado por el contenedor de servicios. El concepto de servicios se introdujo para desacoplar funcionalidades reutilizables y hacer que estos servicios sean conectables y reemplazables, registrándolos en el contenedor de servicios e inyección de dependencias con el que están estrechamente vinculados.
Consulta también: Contenedor de servicios para Drupal Geeks
Otras fuentes
A continuación, una lista de recursos adicionales para ayudarte a familiarizarte con Drupal 8.
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.