Sintaxis
La sintaxis de Latte surgió de los requisitos prácticos de los diseñadores web. Buscamos la sintaxis más amigable con la que pueda escribir elegantemente incluso construcciones que de otro modo serían un verdadero desafío. Al mismo tiempo, todas las expresiones se escriben exactamente igual que en PHP, por lo que no tiene que aprender un nuevo lenguaje. Simplemente aprovecha lo que ya sabe desde hace mucho tiempo.
A continuación se muestra una plantilla mínima que ilustra varios elementos básicos: etiquetas, n:atributos, comentarios y filtros.
Veamos más de cerca estos elementos importantes y cómo pueden ayudarle a crear una plantilla increíble.
Etiquetas
La plantilla contiene etiquetas que controlan la lógica de la plantilla (por ejemplo, bucles foreach) o imprimen
expresiones. Para ambos se utiliza un único delimitador { ... }
, por lo que no tiene que pensar qué delimitador
usar en qué situación, como ocurre en otros sistemas. Si al carácter {
le sigue una comilla o un espacio, Latte
no lo considera el inicio de una etiqueta, gracias a lo cual puede usar construcciones JavaScript, JSON o reglas CSS en las
plantillas sin problemas.
Vea el resumen de todas las etiquetas. Además, también puede crear sus propias etiquetas personalizadas.
Latte entiende PHP
Dentro de las etiquetas puede usar expresiones PHP que conoce bien:
- variables
- cadenas (incluyendo HEREDOC y NOWDOC), arrays, números, etc.
- operadores
- llamadas a funciones y métodos (que se pueden limitar con sandbox)
- match
- funciones anónimas
- callbacks
- comentarios multilínea
/* ... */
- etc…
Latte además complementa la sintaxis de PHP con varias extensiones agradables.
n:atributos
Todas las etiquetas pares, por ejemplo {if} … {/if}
, que operan sobre un único elemento HTML, se pueden
reescribir en forma de n:atributos. Así se podría escribir, por ejemplo, también el {foreach}
en el ejemplo
introductorio:
La funcionalidad entonces se refiere al elemento HTML en el que se coloca:
imprime:
Usando el prefijo inner-
podemos ajustar el comportamiento para que se refiera solo a la parte interna del
elemento:
Se imprimirá:
O usando el prefijo tag-
aplicamos la funcionalidad solo a las propias etiquetas HTML:
Lo que imprime dependiendo de la variable $url
:
Sin embargo, los n:atributos no son solo un atajo para etiquetas pares. También existen n:atributos puros, como n:href o el muy útil ayudante del codificador n:class.
Filtros
Vea el resumen de filtros estándar.
Los filtros se escriben después de una barra vertical (puede haber un espacio antes de ella):
Los filtros se pueden encadenar y luego se aplican en orden de izquierda a derecha:
Los parámetros se introducen después del nombre del filtro separados por dos puntos o comas:
Los filtros también se pueden aplicar a una expresión:
A un bloque:
O directamente al valor (en combinación con la etiqueta {=expr}
):
Etiquetas HTML dinámicas
Latte admite etiquetas HTML dinámicas, que son útiles cuando necesita flexibilidad en los nombres de las etiquetas:
El código anterior puede, por ejemplo, generar <h1>Heading</h1>
o
<h2>Heading</h2>
dependiendo del valor de la variable $level
. Las etiquetas HTML dinámicas
en Latte siempre deben ser pares. Su alternativa es n:tag.
Dado que Latte es un sistema de plantillas seguro, comprueba que el nombre de etiqueta resultante sea válido y no contenga ningún valor no deseado o malicioso. Además, asegura que el nombre de la etiqueta de cierre siempre sea el mismo que el nombre de la etiqueta de apertura.
Comentarios
Los comentarios se escriben de esta manera y no llegan a la salida:
Dentro de las etiquetas funcionan los comentarios PHP:
Azúcar sintáctico
Cadenas sin comillas
Para cadenas simples se pueden omitir las comillas:
Las cadenas simples son aquellas que están formadas puramente por letras, dígitos, guiones bajos, guiones y puntos. No deben
comenzar con un dígito y no deben comenzar ni terminar con un guion. No deben estar compuestas solo por letras mayúsculas y
guiones bajos, porque entonces se considera una constante (por ejemplo, PHP_VERSION
). Y no deben colisionar con las
palabras clave: and
, array
, clone
, default
, false
,
in
, instanceof
, new
, null
, or
, return
,
true
, xor
.
Constantes
Dado que se pueden omitir las comillas en las cadenas simples, recomendamos escribir las constantes globales con una barra inclinada al principio para distinguirlas:
Esta notación es completamente válida en el propio PHP, la barra inclinada dice que la constante está en el namespace global.
Operador ternario abreviado
Si el tercer valor del operador ternario está vacío, se puede omitir:
Notación moderna de claves en array
Las claves en un array se pueden escribir de forma similar a los parámetros nombrados al llamar a funciones:
Filtros
Los filtros se pueden usar para cualquier expresión, basta con encerrar el conjunto en paréntesis:
Operador in
El operador in
puede reemplazar la función in_array()
. La comparación siempre es estricta:
Ventana histórica
Latte introdujo a lo largo de su historia una serie de azúcares sintácticos que aparecieron unos años después en el propio
PHP. Por ejemplo, en Latte era posible escribir arrays como [1, 2, 3]
en lugar de array(1, 2, 3)
o usar
el operador nullsafe $obj?->foo
mucho antes de que fuera posible en el propio PHP. Latte también introdujo el
operador para el desempaquetado de arrays (expand) $arr
, que es el equivalente del actual operador
...$arr
de PHP.
El operador seguro para indefinidos ??->
, que es análogo al operador nullsafe ?->
, pero que no
lanza un error si la variable no existe, surgió por razones históricas y hoy recomendamos usar el operador PHP estándar
?->
.
Limitaciones de PHP en Latte
En Latte solo se pueden escribir expresiones PHP. Por lo tanto, no se pueden usar sentencias terminadas en punto y coma. No se
pueden declarar clases ni usar estructuras de control,
por ejemplo, if
, foreach
, switch
, return
, try
, throw
y otras, en lugar de las cuales Latte ofrece sus etiquetas. Tampoco se pueden usar atributos, backticks ni algunas constantes mágicas. Tampoco se pueden usar
unset
, echo
, include
, require
, exit
, eval
, porque no
son funciones, sino construcciones especiales del lenguaje PHP, y por lo tanto no son expresiones. Los comentarios solo se admiten
los multilínea /* ... */
.
Sin embargo, estas limitaciones se pueden eludir activando la extensión RawPhpExtension, gracias a la cual se puede usar cualquier código PHP en la etiqueta
{php ...}
bajo la responsabilidad del autor de la plantilla.