Herramientas de desarrollo

XF2 proporciona a los desarrolladores una serie de herramientas integradas que puede usar para acelerar el desarrollo de complementos y ahora pasaremos a ver algunas de ellas.

Modo debug

El modo debug puede activarse en el config.php

Puede activarse el modo debug agregando lo siguiente al archivo config.php:


$config['debug'] = true;
                

Activar el modo de desarrollo

El modo de desarrollador es un modo especial que se activa en el archivo config.php y que provovará que XF automáticamente esciba los archivos de salida de desarrollo en el directorio _output. Este modo precisa de activación para plantillas en el sistema de archivos del sistema. En modo de desarrollo se podrá escribir archivos en el sistema de archivos, lo que es importante para asegurar que se tienen los apropiados permisos in situ. Esto puede variar dependiendo del entorno, pero en típicas configuraciones se asegura que para cada complemento en el que se esté trabajando, se tiene el directorio _output configurado a chmod 0777. Por ejemplo, si se está trabajando en un complemento con el ID de Demo, su salida de desarrollo se escribirá en el directorio src/addons/Demo/_output y, por lo tanto, ese directorio necesitará ser completamente escriturable.

Activar el modo de desarrollo también activará automáticamente el modo debug.

Para activar el modo de desarrollo, hay que agregar las siguientes líneas al archivo config.php:


$config['development']['enabled'] = true;
$config['development']['defaultAddOn'] = 'XenFacil/MiComplemento';

El valor defaultAddOn es opcional, pero el agregarlo hará que, automáticamente, se cumplimente por el complemento especificado en el panel de control de administración de XF al crear un nuevo contenido que deberá asociarse al complemento.

Por añadidura a lo de arriba, puede que sea necesario agregar alguna configuración adicional, especialmente si se está usando más de una instalación de XF.


$config['enableMail'] = false;
                

Esto desactivará todos los emails que se envían desde el foro. Esto es especialmente importante si se usa una copia de los datos reales con usuarios y direcciones de email reales (¡luego no digas que no te hemos avisado).

Como alternativa para desactivar directamente el email, puede considerarse el uso de un servicio como MailTrap.io. Este proporciona un buzón gratuito que recibirá todos los correos electrónicos enviados desde tu directorio, lo que es muy útil para probar cualquier correo electrónico que el nuevo complemento pueda enviar.


$config['cookie']['prefix'] = 'cualquierprefijo_';
                

Si se usan dos o más instalaciones de XF en el mismo dominio, pueden experimentarse problemas por sobrescritura de las cookies, causado por la instalación compartida del mismo prefijo de cookie. Por lo tanto, se recomienda asegurar el cambio de prefijo de la cookie para cada instalación de XF configurada. Si no se hace esto, se experimentarán problemas, como por ejemplo, estar desconectado de una instalación de XF al conectarse a otra.

Comandos de desarrollo

XF 2.0 porta un número de comandos CLI de desarrollo general y complementos que tienen como objetivo ayudar a desarrollar de forma más eficiente e incluso, posiblemente, automatizar los script de algunos procesos comunes.

En esta sección repasaremos algunas de las herramientas comunes y explicaremos qué hacen.

Comandos específicos de complementos

Crear un nuevo complemento

Terminal

$ php cmd.php xf-addon:create

El comando xf-addon:create es como inicialmente se configura y crea un complemento. Cuando se ejecuta, todo lo que se necesita preguntar son algunas cuestiones básicas:

  • Introducir un ID para el complemento
  • Introducir un título
  • Introducir una cadena de versión (ej. 1.0.0 Alpha)
  • Introducir un ID de versión (ej. 1000010)

Entonces existirá la opción de crear un complemento y escribir la salida de su archivo addon.json, así como se preguntará por si desea agregar un archivo Setup.php.

Escribir el archivo hashes.json

Terminal

$ php cmd.php xf-addon:write-hashes

Este comando hará un bucle a través de todos los archivos que pertenecen al complemento, calculará un hash del archivo y se agregará al archivo hashes.json.

Exportar archivos .XML de _data

Terminal

$ php cmd.php xf-addon:export

Este es el comando que se usará para exportar todos los datos del complemento a archivos XML en el interior del directorio _data . Tras exportar los archivos, automáticamente ejecutará el comando xf-addon:write-hashes para asegurar que las partes están al día. Exporta los datos de lo que está actualmente en la base de datos (en lugar de los archivos de salida de desarrollo).

Actualizar la versión del complemento

Terminal

$ php cmd.php xf-addon:bump-version [addon_id] --version-id 1020370 --version-string 1.2.3

Este comando actualiza el ID del complemento a la nueva versión del ID y a la nueva cadena de versión. Ésto permite actualizar el complemento a la nueva versión en un solo paso, sin tener que realizar actualizaciones y reconstrucciones. Las opciones de arriba son opcionales y si no se proporcionan la sesión terminal preguntará por ellas. Si solo se especifica el ID de versión, se intentará inferir la cadena de versión correcta automáticamente si coincide con el Formato recomendado de versión. Una vez terminado el comando, se actualiza automáticamente el archivo addon.json y la base de datos con los detalles correctos de la versión.

Sincronizar addon.json con la base de datos

Terminal

$ php cmd.php xf-addon:sync-json [addon_id]

Puede preferirse a veces editar directamente el archivo JSON con ciertos detalles. Podría ser la versión, un icono nuevo, cambiar el título o la descripción. Cambiar JSON de este modo puede llevar al sistema de complementos a creer que existen cambios pendientes o que se puede actualizar el complemento. Reconstruirlo o actualizarlo puede ser francamente una operación destructiva si aún no se han exportado los datos actuales. Por lo tanto se recomienda ejecutar este comando como si fuera una vía de importación de datos sin afectar a los datos existentes.

Construir un lanzamiento

Terminal

$ php cmd.php xf-addon:build-release

Cuando se ejecuta este comando, primero se ejecuta el comando xf-addon:export, que a su vez ejecuta el comando xf-addon:write-hashes antes de reunir todos los archivos y escribirlos en un archivo ZIP. Una vez creado el archivo ZIP se guardará en el directorio _releases y se llamará -.zip.

Comandos de desarrollo

En la actualidad existen unos pocos comandos de desarrollo, pero sólo los dos más importantes se tratan aquí.

Para usar cualquiera de estos comandos, hay que activar el modo de desarrollo en el archivo config.php.

Advertencia

Ambos de los siguientes comandos pueden potencialmente causar pérdida de datos si existe una situación en la que la base de datos y el directorio _output no están sincronizados. Siempre es recomendable usar un VCS (Version Control System - Sistema de Control de Versión) tal como GitHub para mitigar el impacto de tales errores.

Importar la salida de desarrollo

Terminal

$ php cmd.php xf-dev:import --addon

Ejecutar este comando importará todos los archivos de salida de desarrollo del complemento desde el directorio _output a la base de datos.

Exportar la salida de desarrollo

Terminal

$ php cmd.php xf-dev:export --addon

Éste exportará todos los datos asociados actualmente al complemento desde la base de datos al interior del directorio _output.

Código de depuración

Debe ser posible configurar su herramienta de depuración favorita (XDebug, Zend Debugger etc.) para trabajar con XF2. Aunque, a veces, el código de depuración puede ser tan rudimentario como ver rápidamente qué valor (o tipo de valor) mantiene una variable en un momento dado.

Volcar una variable

Naturalmente, PHP tiene una herramienta integrada para manejar esto. Lo conocerás probablemente como var_dump(). XF porta con dos reemplazos para esto:


\XF::dump($var); \XF::dumpSimple($var);

La versión simple, la mayoría de veces, sólo vuelca el valor de una variable a texto plano. Por ejemplo, si se quiere usar para volcar el valor de una matríz, se verá la salida en la parte superior de la página tal como así:


array(2) {
  ["user_id"] => int(1)
  ["username"] => string(5) "Admin"
}
                

En la actualidad se obtiene la misma salida que con la estandar var_dump, aunque ligeramente modificada para su legibilidad y envuelta en el interior de etiquetas <pre> para asegurar que se mantienen los espacios cuando se analiza.

En la actualidad, su alternativa es un componente denominado VarDumper del proyecto Symfony. Hace un volcado en HTML, CSS y JS para crear una mucho más funcional y potencialmente más fácil lectura de la salida. Permite colapsar ciertas secciones para ciertos valores cuya salida contiene una considerable cantidad de datos, como los objetos, pudiendo colapsar automáticamente estas secciones.