Migrazione da Twig a Latte
State convertendo al più moderno Latte un progetto scritto in Twig? Abbiamo uno strumento che semplifica la migrazione. Provatelo online.
Potete scaricare lo strumento da GitHub oppure installarlo con Composer:
composer create-project latte/tools
Il convertitore non usa semplici sostituzioni con espressioni regolari: usa il vero parser di Twig, il che gli permette di gestire una sintassi complessa a piacere.
Per la conversione da Twig a Latte si usa lo script twig-to-latte.php:
php twig-to-latte.php input.twig.html [output.latte]
Conversione
Il risultato della conversione richiede una revisione manuale, perché la conversione non può essere univoca. Twig usa la
sintassi con il punto, dove {{ a.b }} può significare $a->b, $a['b'] oppure
$a->getB(), cosa che non si può distinguere in fase di compilazione. Il convertitore trasforma quindi tutto in
$a->b.
Alcune funzioni, alcuni filtri o alcuni tag di Twig possono non avere un equivalente diretto in Latte, oppure comportarsi in modo leggermente diverso.
Esempio
Un file di ingresso potrebbe avere questo aspetto:
{% use "blocks.twig" %}
<!DOCTYPE html>
<html>
<head>
<title>{{ block("title") }}</title>
</head>
<body>
<h1>{% block title %}My Web{% endblock %}</h1>
<ul id="navigation">
{% for item in navigation %}
{% if not item.active %}
<li>{{ item.caption }}</li>
{% else %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endif %}
{% endfor %}
</ul>
</body>
</html>
Dopo la conversione a Latte otteniamo questo template:
{import 'blocks.latte'}
<!DOCTYPE html>
<html>
<head>
<title>{include title}</title>
</head>
<body>
<h1>{block title}My Web{/block}</h1>
<ul id="navigation">
{foreach $navigation as $item}
{if !$item->active}
<li>{$item->caption}</li>
{else}
<li><a href="{$item->href}">{$item->caption}</a></li>
{/if}
{/foreach}
</ul>
</body>
</html>