Soporte

Preguntas frecuentes

Respuestas sobre seguridad, requisitos del sistema y los límites del motor. ¿Falta algo? La guía completa está en GUIDE.md dentro del paquete de descarga.

¿En qué se diferencia UIEngine de Twig o Smarty?

UIEngine sigue la misma idea básica (separar lógica y presentación, sintaxis de plantilla propia), pero se mantiene deliberadamente compacto: sin dependencias externas, un único analizador de gramática claro y legible para las expresiones, y una sandbox de política de seguridad opcional incorporada para entornos con varios autores de plantillas de distinta confianza.

¿UIEngine usa eval() internamente?

No. Cada expresión (en {if}, {math}, argumentos de plugins, variables y modificadores) pasa por un analizador de gramática recursivo (ExpressionCompiler) que solo permite un conjunto fijo de construcciones. Las llamadas a funciones, a métodos y "::" quedan categóricamente excluidas.

¿Qué versión de PHP se necesita?

PHP 8.1 o superior. El motor usa características modernas del lenguaje como propiedades readonly, expresiones match y operadores nullsafe en el código generado.

¿Necesito Composer?

No, pero es compatible. Sin Composer basta con copiar la carpeta e incluir UIEngine/src/Autoload.php – un autoloader PSR-4 propio y ligero se encarga del resto. Con Composer se usa automáticamente su autoloader.

¿Qué hace exactamente la sandbox de política de seguridad?

Restringe aún más un motor ya seguro: limita los modificadores permitidos a una lista blanca, restringe qué constantes de PHP son visibles vía {$engine.const.*}, permite directorios de plantillas adicionales, desactiva {eval} por completo y permite {fetch} solo para prefijos de archivo/URL autorizados explícitamente. Útil en cuanto varios autores de plantillas de distinta confianza comparten la misma instancia del motor.

¿Cómo funciona el caché?

Las plantillas compiladas se guardan como archivos PHP en el directorio de caché y solo se recompilan al cambiar. Además, display($template, $cacheId, $lifetime) puede cachear la página completa renderizada – las secciones dentro de {nocache}...{/nocache} se siguen reevaluando en cada solicitud.

¿Puedo registrar mis propias etiquetas, modificadores o plugins?

Sí, en tres niveles: plugins de función simples con register(), plugins de bloque con registerBlock() (transforman contenido ya renderizado) y plugins de compilador completos con registerCustomTag() para sintaxis de etiquetas totalmente nuevas.

¿Es UIEngine adecuado para varios autores de plantillas independientes en la misma instalación?

Sí, para eso exactamente existe la sandbox de SecurityPolicy. Sin una política definida, el motor se comporta de forma abierta (pensado para una única base de código de confianza); con una política definida, los modificadores, constantes y accesos a archivos se pueden restringir por instancia.

¿Dónde encuentro la documentación completa?

El paquete de descarga incluye GUIDE.md con 17 secciones, desde la instalación hasta cada función del lenguaje y la resolución de problemas, cada una con ejemplos funcionales. Este sitio resume los puntos clave, pero no sustituye por completo la guía detallada.

¿Cómo reporto una vulnerabilidad de seguridad?

A través de los datos de contacto incluidos en el paquete de descarga, con una descripción lo más precisa posible y un ejemplo mínimo de reproducción. El motor ya ha sido auditado externamente al menos una vez (ver el changelog de v15); más reportes son explícitamente bienvenidos.

¿No encontraste tu respuesta?

La guía completa cubre cada función del lenguaje con ejemplos funcionales.