¿Por qué usar plantillas?
¿Por qué debería usar un sistema de plantillas en PHP?
¿Por qué usar un sistema de plantillas en PHP si el propio PHP es un lenguaje de plantillas?
Repasemos primero brevemente la historia de este lenguaje, llena de giros interesantes. Uno de los primeros lenguajes de programación usados para generar páginas HTML fue C. Pronto se vio, sin embargo, que emplearlo con ese fin resultaba poco práctico. Rasmus Lerdorf creó entonces PHP, que facilitaba la generación de HTML dinámico con C en el backend. PHP se diseñó originalmente como un lenguaje de plantillas, pero con el tiempo fue adquiriendo más funciones hasta convertirse en un lenguaje de programación completo.
Aun así, sigue funcionando como lenguaje de plantillas. Un archivo PHP puede contener una página HTML en la que las variables
se imprimen con <?= $foo ?>, etc.
En los primeros tiempos de PHP nació el sistema de plantillas Smarty, cuyo propósito era separar estrictamente la presentación (HTML/CSS) de la lógica de la aplicación. Ofrecía deliberadamente un lenguaje más limitado que el propio PHP, de modo que un desarrollador no pudiera, por ejemplo, lanzar una consulta a la base de datos desde una plantilla. Por otro lado, suponía una dependencia adicional en los proyectos, aumentaba su complejidad y obligaba a los programadores a aprender el nuevo lenguaje de Smarty. Semejantes beneficios eran discutibles, y para las plantillas se siguió usando PHP a secas.
Con el tiempo, los sistemas de plantillas empezaron a resultar útiles. Trajeron conceptos como la herencia, el modo sandbox y toda una serie de funciones que simplificaban notablemente la creación de plantillas frente al PHP puro. Pasó a primer plano el tema de la seguridad, la existencia de vulnerabilidades como XSS y la necesidad de escapado. Los sistemas de plantillas introdujeron el escapado automático para eliminar el riesgo de que un programador lo olvidara y abriera un grave agujero de seguridad (enseguida veremos que esto tiene ciertas trampas).
Hoy, las ventajas de los sistemas de plantillas superan con creces los costes asociados a su implantación. Por eso tiene sentido usarlos.
¿Por qué Latte es mejor que Twig o Blade?
Hay varias razones: algunas son cómodas y otras fundamentalmente útiles. Latte es una combinación de comodidad y utilidad.
Primero, lo agradable: Latte tiene la misma sintaxis que PHP. La
única diferencia está en la notación de las etiquetas, que prefiere las más cortas { y } en lugar de
<?= y ?>. Esto significa que no tiene que aprender un lenguaje nuevo. Los costes de formación son
mínimos. Y lo más importante: durante el desarrollo no tiene que estar „cambiando“ continuamente entre el lenguaje PHP y el
lenguaje de las plantillas, porque son el mismo. A diferencia de las plantillas de Twig, que usan una sintaxis parecida a Python
y obligan al programador a alternar entre dos lenguajes distintos.
Ahora la razón inmensamente útil: todos los sistemas de plantillas, como Twig, Blade o Smarty, han ido incorporando
protección contra XSS en forma de escapado automático. Más exactamente, la llamada
automática a la función htmlspecialchars(). Los creadores de Latte se dieron cuenta, sin embargo, de que esa no es
en absoluto la solución correcta. Y es que las distintas partes del documento requieren métodos de escapado distintos. El
escapado automático ingenuo es una función peligrosa, porque crea una falsa sensación de seguridad.
Para que el escapado automático sea funcional y fiable, debe reconocer en qué punto del documento se están imprimiendo los datos (a eso lo llamamos contextos) y elegir la función de escapado en consecuencia. Es decir, debe ser sensible al contexto. Y eso es justo lo que Latte sabe hacer. Entiende el HTML. No percibe la plantilla como una simple cadena de caracteres, sino que comprende qué son las etiquetas, los atributos, etc. Por eso escapa de forma distinta en el texto HTML, dentro de las etiquetas HTML, dentro de JavaScript, etc.
Latte es el primer y único sistema de plantillas de PHP con escapado sensible al contexto. Es el único sistema de plantillas realmente seguro.
Y otra razón agradable: como Latte entiende el HTML, ofrece otras funciones muy cómodas. Por ejemplo, los n:atributos. O la posibilidad de comprobar los enlaces. Y muchas más.
¿Qué es el escapado?
El escapado es el proceso de sustituir los caracteres con significado especial por las secuencias correspondientes al insertar
una cadena dentro de otra, para evitar efectos no deseados o errores. Por ejemplo, al insertar una cadena en un texto HTML, donde
el carácter < tiene un significado especial (indica el comienzo de una etiqueta), lo sustituimos por la secuencia
correspondiente, que es la entidad HTML <. Así el navegador puede mostrar correctamente el símbolo
<.
Un ejemplo sencillo de escapado directamente al escribir código PHP es insertar unas comillas en una cadena precediéndolas de una barra invertida.
El escapado se trata con más detalle en el capítulo Cómo defenderse del XSS.
¿Se puede ejecutar una consulta a la base de datos desde una plantilla de Latte?
En las plantillas se puede trabajar con los objetos que el programador les pasa. Si el programador quiere, puede pasar a la plantilla un objeto de base de datos y ejecutar una consulta sobre él. Si esa es su intención, no hay motivo para impedirlo.
La situación es distinta si quiere dar a clientes o a codificadores externos la posibilidad de editar las plantillas. En ese caso, desde luego no quiere que tengan acceso a la base de datos. Por supuesto, no pasará el objeto de base de datos a la plantilla, pero ¿y si se puede llegar a él a través de otro objeto? La solución es el modo sandbox, que permite definir qué métodos pueden llamarse en las plantillas. Gracias a él no tiene que preocuparse por brechas de seguridad.
¿Cuáles son las principales diferencias entre sistemas de plantillas como Latte, Twig y Blade?
Las diferencias entre sistemas de plantillas como Latte, Twig y Blade radican sobre todo en su sintaxis, su seguridad y su integración con los frameworks:
- Latte: usa la sintaxis de PHP, lo que facilita aprenderlo y usarlo. Proporciona una protección de primera clase contra los ataques XSS gracias al escapado sensible al contexto. Está bien integrado con Nette Framework, pero se puede usar de forma independiente.
- Twig: usa una sintaxis parecida a Python, que difiere notablemente de PHP. Escapa sin distinguir contextos
(
htmlspecialcharsbásico). Está bien integrado con el framework Symfony. - Blade: usa una mezcla de PHP y sintaxis propia. Escapa sin distinguir contextos (
htmlspecialcharsbásico). Está estrechamente integrado con las funciones y el ecosistema de Laravel.
¿Merece la pena que las empresas usen un sistema de plantillas?
En primer lugar, los costes de formación y de uso, y los beneficios en conjunto, varían mucho según el sistema. El sistema de plantillas Latte, gracias a que usa la sintaxis de PHP, simplifica enormemente el aprendizaje a los programadores que ya conocen este lenguaje. Normalmente bastan unas pocas horas para que un programador se familiarice lo suficiente con Latte, lo que reduce los costes de formación y acelera la adopción de la tecnología y, sobre todo, la eficiencia en el uso diario.
Además, Latte ofrece un alto nivel de protección frente a las vulnerabilidades XSS gracias a su tecnología única de escapado sensible al contexto. Esta protección es clave para garantizar la seguridad de las aplicaciones web y minimizar el riesgo de ataques que podrían poner en peligro a los usuarios o los datos de la empresa. La seguridad de las aplicaciones web también es importante para mantener la reputación de la empresa. Los problemas de seguridad pueden provocar la pérdida de la confianza de los clientes y dañar la imagen de la empresa en el mercado.
Usar Latte también reduce los costes generales de desarrollo y mantenimiento, al facilitar ambos. Por eso, usar un sistema de plantillas merece la pena sin duda.
¿Afecta Latte al rendimiento de las aplicaciones web?
Aunque las plantillas de Latte se procesan con rapidez, este aspecto en realidad no importa en producción. La razón es que los archivos de plantilla se analizan una sola vez, la primera vez que se muestran. Después se compilan a código PHP nativo, se guardan en disco y se ejecutan en cada petición siguiente sin necesidad de recompilarlos.
Así funciona en un entorno de producción. Durante el desarrollo, las plantillas de Latte se recompilan cada vez que cambia su contenido, de modo que el desarrollador ve siempre la versión actual.