Nette Documentation Preview

syntax
¿Por qué usar plantillas?
*************************


¿Por qué debería usar un sistema de plantillas en PHP? .[#toc-why-should-i-use-a-templating-system-in-php]
----------------------------------------------------------------------------------------------------------

¿Por qué usar un sistema de plantillas en PHP, cuando PHP en sí mismo es un lenguaje de plantillas?

Primero, repasemos brevemente la historia de este lenguaje, que está llena de giros interesantes. Uno de los primeros lenguajes de programación utilizados para generar páginas HTML fue el lenguaje C. Sin embargo, pronto se demostró que su uso para este propósito era poco práctico. Por lo tanto, Rasmus Lerdorf creó PHP, que facilitó la generación de HTML dinámico con el lenguaje C en el backend. PHP fue diseñado originalmente como un lenguaje de plantillas, pero con el tiempo adquirió más funciones y se convirtió en un lenguaje de programación completo.

A pesar de esto, PHP sigue siendo un lenguaje de plantillas. En un archivo PHP, se puede escribir una página HTML en la que las variables se imprimen utilizando `<?= $foo ?>`, etc.

Desde los primeros días de la historia de PHP, se creó el sistema de plantillas Smarty, cuyo propósito era separar estrictamente la apariencia (HTML/CSS) de la lógica de la aplicación. Por lo tanto, proporcionó un lenguaje más limitado que PHP para evitar que el desarrollador, por ejemplo, realice consultas a la base de datos desde la plantilla. Por otro lado, introdujo una dependencia adicional en los proyectos, aumentó su complejidad y los programadores tuvieron que aprender un nuevo lenguaje, Smarty. El beneficio fue discutible y PHP siguió siendo utilizado para las plantillas.

Con el tiempo, los sistemas de plantillas comenzaron a ser útiles. Introdujeron conceptos como [herencia de plantillas|template-inheritance], [modo sandbox|sandbox] y una serie de otras características que simplificaron significativamente la creación de plantillas en comparación con PHP puro. La seguridad y la existencia de [vulnerabilidades como XSS|safety-first] y la necesidad de [escapar|#What is escaping] se convirtieron en temas relevantes. Los sistemas de plantillas introdujeron el autoescapado para eliminar el riesgo de que el programador lo olvide y se cree una vulnerabilidad de seguridad grave (en breve veremos que esto tiene ciertos problemas).

Hoy en día, los beneficios de los sistemas de plantillas superan con creces los costos asociados con su implementación. Por lo tanto, tiene sentido utilizarlos.


¿Por qué es mejor Latte que, por ejemplo, Twig o Blade? .[#toc-why-is-latte-better-than-twig-or-blade]
------------------------------------------------------------------------------------------------------

Hay varias razones, algunas son agradables y otras esencialmente útiles. Latte es una combinación de lo agradable y lo útil.

*Primero, lo agradable:* Latte tiene la misma [sintaxis que PHP|syntax#Latte Understands PHP]. Sólo difiere en la notación de las etiquetas, en lugar de `<?=` y `?>`, prefiere `{` y `}` más cortos. Esto significa que no tienes que aprender un nuevo lenguaje. Los costos de capacitación son mínimos. Y lo más importante, durante el desarrollo no tienes que cambiar constantemente entre el lenguaje PHP y el lenguaje de plantillas, ya que ambos son iguales. A diferencia de las plantillas Twig, que utilizan el lenguaje Python, y el programador debe alternar entre dos lenguajes diferentes.

*Y ahora una razón extremadamente útil:* Todos los sistemas de plantillas, como Twig, Blade o Smarty, han introducido protección contra XSS en forma de [escapado automático|#What is escaping]. Más precisamente, llamando automáticamente a la función `htmlspecialchars()`. Sin embargo, los creadores de Latte se dieron cuenta de que esto no es la solución correcta. Porque en diferentes partes del documento, se escapa de diferentes maneras. 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 confiable, debe reconocer en qué parte del documento se están imprimiendo los datos (llamamos a esto contextos) y elegir la función de escapado según eso. Por lo tanto, debe ser [sensible al contexto|safety-first#Context-Aware Escaping]. Y esto es precisamente lo que Latte puede hacer. Entiende HTML. No percibe la plantilla solo como una cadena de caracteres, sino que comprende qué son las etiquetas, los atributos, etc. Por lo tanto, escapa de manera diferente en el texto HTML, dentro de las etiquetas HTML, dentro de JavaScript, etc.

Latte es el primer y único sistema de plantillas en PHP que tiene escapado sensible al contexto. Por lo tanto, representa el único sistema de plantillas verdaderamente seguro.

*Y otra razón agradable:* Gracias a que Latte entiende HTML, ofrece otras características muy agradables. Por ejemplo, [n:atributos|syntax#n:attributes]. O la capacidad de [verificar enlaces|safety-first#Link checking]. Y muchas más.


¿Qué es el escape? .[#toc-what-is-escaping]
-------------------------------------------

Escapar es un proceso que consiste en sustituir caracteres con significados especiales por las secuencias correspondientes al insertar una cadena en otra para evitar efectos no deseados o errores. Por ejemplo, al insertar una cadena en un texto HTML, en el que el carácter `<` tiene un significado especial porque indica el comienzo de una etiqueta, lo sustituimos por la secuencia correspondiente, que es la entidad HTML `&lt;`. Esto permite al navegador mostrar correctamente el símbolo `<`.

Un ejemplo sencillo de escape directo al escribir código PHP es insertar una comilla en una cadena colocando una barra invertida delante de ella.

Discutimos el escape con más detalle en el capítulo [Cómo defenderse contra XSS |safety-first#How to Defend Against XSS?].


¿Puede ejecutarse una consulta a la base de datos desde una plantilla Latte? .[#toc-can-a-database-query-be-executed-from-a-latte-template]
-------------------------------------------------------------------------------------------------------------------------------------------

En las plantillas se puede trabajar con objetos que el programador les pasa. Si el programador quiere, puede pasar un objeto de base de datos a la plantilla y realizar una consulta. Si tienen intención de hacerlo, no hay ninguna razón para impedírselo.

Una situación diferente surge si desea dar a los clientes o codificadores externos la capacidad de editar plantillas. En este caso, definitivamente no querrá que tengan acceso a la base de datos. Por supuesto, usted no pasará el objeto de base de datos a la plantilla, pero ¿qué pasa si se puede acceder a través de otro objeto? La solución es el [modo sandbox |sandbox], que te permite definir qué métodos pueden ser llamados en las plantillas. Gracias a esto, no tienes que preocuparte por las brechas de seguridad.


¿Cuáles son las principales diferencias entre sistemas de plantillas como Latte, Twig y Blade? .[#toc-what-are-the-main-differences-between-templating-systems-like-latte-twig-and-blade]
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Las diferencias entre sistemas de plantillas como Latte, Twig y Blade radican principalmente en su sintaxis, seguridad e integración con frameworks:

- Latte: utiliza la sintaxis del lenguaje PHP, lo que facilita su aprendizaje y uso. Ofrece una protección de primer nivel contra ataques XSS.
- Twig: utiliza una sintaxis similar a la de Python, que es bastante diferente de la de PHP. Escapa sin distinción de contexto. Está bien integrado con el framework Symfony.
- Blade: utiliza una mezcla de PHP y sintaxis personalizada. Escapa sin distinción de contexto. Está estrechamente integrado con las características y el ecosistema de Laravel.


¿Merece la pena para las empresas utilizar un sistema de plantillas? .[#toc-is-it-worth-it-for-companies-to-use-a-templating-system]
------------------------------------------------------------------------------------------------------------------------------------

En primer lugar, los costes asociados a la formación, el uso y los beneficios generales varían significativamente en función del sistema. El sistema de plantillas Latte, gracias a su uso de la sintaxis PHP, simplifica enormemente el aprendizaje para los programadores ya familiarizados con este lenguaje. Por lo general, un programador tarda unas horas en familiarizarse suficientemente con Latte, lo que reduce los costes de formación y acelera la adopción de la tecnología y, lo que es más importante, la eficacia en el uso diario.

Además, Latte proporciona un alto nivel de protección contra la vulnerabilidad XSS gracias a su exclusiva tecnología de escape sensible al contexto. Esta protección es crucial para garantizar la seguridad de las aplicaciones web y minimizar el riesgo de ataques que puedan 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 buena reputación de una empresa. Los problemas de seguridad pueden provocar la pérdida de confianza de los clientes y dañar la reputación de la empresa en el mercado.

El uso de Latte también reduce los costes generales de desarrollo y mantenimiento, ya que facilita ambos. Por lo tanto, utilizar un sistema de plantillas merece definitivamente la pena.


¿Afecta Latte al rendimiento de las aplicaciones web? .[#toc-does-latte-affect-the-performance-of-web-applications]
-------------------------------------------------------------------------------------------------------------------

Aunque las plantillas Latte se procesan rápidamente, este aspecto no importa realmente. La razón es que el análisis sintáctico de los archivos sólo se produce una vez durante la primera visualización. Después se compilan en código PHP, se almacenan en disco y se ejecutan en cada petición posterior sin necesidad de recompilación.

Así es como funciona en un entorno de producción. Durante el desarrollo, las plantillas Latte se recompilan cada vez que cambia su contenido, por lo que el desarrollador siempre ve la versión actual.

¿Por qué usar plantillas?

¿Por qué debería usar un sistema de plantillas en PHP?

¿Por qué usar un sistema de plantillas en PHP, cuando PHP en sí mismo es un lenguaje de plantillas?

Primero, repasemos brevemente la historia de este lenguaje, que está llena de giros interesantes. Uno de los primeros lenguajes de programación utilizados para generar páginas HTML fue el lenguaje C. Sin embargo, pronto se demostró que su uso para este propósito era poco práctico. Por lo tanto, Rasmus Lerdorf creó PHP, que facilitó la generación de HTML dinámico con el lenguaje C en el backend. PHP fue diseñado originalmente como un lenguaje de plantillas, pero con el tiempo adquirió más funciones y se convirtió en un lenguaje de programación completo.

A pesar de esto, PHP sigue siendo un lenguaje de plantillas. En un archivo PHP, se puede escribir una página HTML en la que las variables se imprimen utilizando <?= $foo ?>, etc.

Desde los primeros días de la historia de PHP, se creó el sistema de plantillas Smarty, cuyo propósito era separar estrictamente la apariencia (HTML/CSS) de la lógica de la aplicación. Por lo tanto, proporcionó un lenguaje más limitado que PHP para evitar que el desarrollador, por ejemplo, realice consultas a la base de datos desde la plantilla. Por otro lado, introdujo una dependencia adicional en los proyectos, aumentó su complejidad y los programadores tuvieron que aprender un nuevo lenguaje, Smarty. El beneficio fue discutible y PHP siguió siendo utilizado para las plantillas.

Con el tiempo, los sistemas de plantillas comenzaron a ser útiles. Introdujeron conceptos como herencia de plantillas, modo sandbox y una serie de otras características que simplificaron significativamente la creación de plantillas en comparación con PHP puro. La seguridad y la existencia de vulnerabilidades como XSS y la necesidad de escapar se convirtieron en temas relevantes. Los sistemas de plantillas introdujeron el autoescapado para eliminar el riesgo de que el programador lo olvide y se cree una vulnerabilidad de seguridad grave (en breve veremos que esto tiene ciertos problemas).

Hoy en día, los beneficios de los sistemas de plantillas superan con creces los costos asociados con su implementación. Por lo tanto, tiene sentido utilizarlos.

¿Por qué es mejor Latte que, por ejemplo, Twig o Blade?

Hay varias razones, algunas son agradables y otras esencialmente útiles. Latte es una combinación de lo agradable y lo útil.

Primero, lo agradable: Latte tiene la misma sintaxis que PHP. Sólo difiere en la notación de las etiquetas, en lugar de <?= y ?>, prefiere { y } más cortos. Esto significa que no tienes que aprender un nuevo lenguaje. Los costos de capacitación son mínimos. Y lo más importante, durante el desarrollo no tienes que cambiar constantemente entre el lenguaje PHP y el lenguaje de plantillas, ya que ambos son iguales. A diferencia de las plantillas Twig, que utilizan el lenguaje Python, y el programador debe alternar entre dos lenguajes diferentes.

Y ahora una razón extremadamente útil: Todos los sistemas de plantillas, como Twig, Blade o Smarty, han introducido protección contra XSS en forma de escapado automático. Más precisamente, llamando automáticamente a la función htmlspecialchars(). Sin embargo, los creadores de Latte se dieron cuenta de que esto no es la solución correcta. Porque en diferentes partes del documento, se escapa de diferentes maneras. 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 confiable, debe reconocer en qué parte del documento se están imprimiendo los datos (llamamos a esto contextos) y elegir la función de escapado según eso. Por lo tanto, debe ser sensible al contexto. Y esto es precisamente lo que Latte puede hacer. Entiende HTML. No percibe la plantilla solo como una cadena de caracteres, sino que comprende qué son las etiquetas, los atributos, etc. Por lo tanto, escapa de manera diferente en el texto HTML, dentro de las etiquetas HTML, dentro de JavaScript, etc.

Latte es el primer y único sistema de plantillas en PHP que tiene escapado sensible al contexto. Por lo tanto, representa el único sistema de plantillas verdaderamente seguro.

Y otra razón agradable: Gracias a que Latte entiende HTML, ofrece otras características muy agradables. Por ejemplo, n:atributos. O la capacidad de verificar enlaces. Y muchas más.

¿Qué es el escape?

Escapar es un proceso que consiste en sustituir caracteres con significados especiales por las secuencias correspondientes al insertar una cadena en otra para evitar efectos no deseados o errores. Por ejemplo, al insertar una cadena en un texto HTML, en el que el carácter < tiene un significado especial porque indica el comienzo de una etiqueta, lo sustituimos por la secuencia correspondiente, que es la entidad HTML &lt;. Esto permite al navegador mostrar correctamente el símbolo <.

Un ejemplo sencillo de escape directo al escribir código PHP es insertar una comilla en una cadena colocando una barra invertida delante de ella.

Discutimos el escape con más detalle en el capítulo Cómo defenderse contra XSS.

¿Puede ejecutarse una consulta a la base de datos desde una plantilla Latte?

En las plantillas se puede trabajar con objetos que el programador les pasa. Si el programador quiere, puede pasar un objeto de base de datos a la plantilla y realizar una consulta. Si tienen intención de hacerlo, no hay ninguna razón para impedírselo.

Una situación diferente surge si desea dar a los clientes o codificadores externos la capacidad de editar plantillas. En este caso, definitivamente no querrá que tengan acceso a la base de datos. Por supuesto, usted no pasará el objeto de base de datos a la plantilla, pero ¿qué pasa si se puede acceder a través de otro objeto? La solución es el modo sandbox, que te permite definir qué métodos pueden ser llamados en las plantillas. Gracias a esto, no tienes que preocuparte por las 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 principalmente en su sintaxis, seguridad e integración con frameworks:

  • Latte: utiliza la sintaxis del lenguaje PHP, lo que facilita su aprendizaje y uso. Ofrece una protección de primer nivel contra ataques XSS.
  • Twig: utiliza una sintaxis similar a la de Python, que es bastante diferente de la de PHP. Escapa sin distinción de contexto. Está bien integrado con el framework Symfony.
  • Blade: utiliza una mezcla de PHP y sintaxis personalizada. Escapa sin distinción de contexto. Está estrechamente integrado con las características y el ecosistema de Laravel.

¿Merece la pena para las empresas utilizar un sistema de plantillas?

En primer lugar, los costes asociados a la formación, el uso y los beneficios generales varían significativamente en función del sistema. El sistema de plantillas Latte, gracias a su uso de la sintaxis PHP, simplifica enormemente el aprendizaje para los programadores ya familiarizados con este lenguaje. Por lo general, un programador tarda unas horas en familiarizarse suficientemente con Latte, lo que reduce los costes de formación y acelera la adopción de la tecnología y, lo que es más importante, la eficacia en el uso diario.

Además, Latte proporciona un alto nivel de protección contra la vulnerabilidad XSS gracias a su exclusiva tecnología de escape sensible al contexto. Esta protección es crucial para garantizar la seguridad de las aplicaciones web y minimizar el riesgo de ataques que puedan 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 buena reputación de una empresa. Los problemas de seguridad pueden provocar la pérdida de confianza de los clientes y dañar la reputación de la empresa en el mercado.

El uso de Latte también reduce los costes generales de desarrollo y mantenimiento, ya que facilita ambos. Por lo tanto, utilizar un sistema de plantillas merece definitivamente la pena.

¿Afecta Latte al rendimiento de las aplicaciones web?

Aunque las plantillas Latte se procesan rápidamente, este aspecto no importa realmente. La razón es que el análisis sintáctico de los archivos sólo se produce una vez durante la primera visualización. Después se compilan en código PHP, se almacenan en disco y se ejecutan en cada petición posterior sin necesidad de recompilación.

Así es como funciona en un entorno de producción. Durante el desarrollo, las plantillas Latte se recompilan cada vez que cambia su contenido, por lo que el desarrollador siempre ve la versión actual.