Nette Documentation Preview

syntax
Migration de Twig vers Latte
****************************

.[perex]
Êtes-vous en train de migrer un projet écrit en Twig vers Latte, plus moderne ? Nous avons un outil pour faciliter cette migration. [Essayez-le en ligne |https://twig2latte.nette.org].

Vous pouvez télécharger l'outil depuis [GitHub |https://github.com/nette/latte-tools] ou l'installer en utilisant Composer :

```shell
composer create-project latte/tools
```

Le convertisseur n'utilise pas de simples substitutions d'expressions régulières, mais utilise directement l'analyseur Twig, ce qui lui permet de traiter toute syntaxe complexe.

Un script `twig-to-latte.php` est utilisé pour convertir Twig en Latte :

```shell
twig-to-latte.php input.twig.html [output.latte]
```


Conversion .[#toc-conversion]
-----------------------------

La conversion nécessite une édition manuelle du résultat, car la conversion ne peut pas être faite sans ambiguïté. Twig utilise la syntaxe par points, où `{{ a.b }}` peut signifier `$a->b`, `$a['b']` ou `$a->getB()`, ce qui ne peut être distingué lors de la compilation. Le convertisseur convertit donc tout en `$a->b`.

Certaines fonctions, filtres ou balises n'ont pas d'équivalent dans Latte, ou peuvent se comporter de manière légèrement différente.


Exemple .[#toc-example]
-----------------------

Le fichier d'entrée pourrait ressembler à ceci :

```latte
{% 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>
```

Après avoir converti en Latte, nous obtenons ce modèle :

```latte
{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>
```

{{leftbar: /@left-menu}}

Migration de Twig vers Latte

Êtes-vous en train de migrer un projet écrit en Twig vers Latte, plus moderne ? Nous avons un outil pour faciliter cette migration. Essayez-le en ligne.

Vous pouvez télécharger l'outil depuis GitHub ou l'installer en utilisant Composer :

composer create-project latte/tools

Le convertisseur n'utilise pas de simples substitutions d'expressions régulières, mais utilise directement l'analyseur Twig, ce qui lui permet de traiter toute syntaxe complexe.

Un script twig-to-latte.php est utilisé pour convertir Twig en Latte :

twig-to-latte.php input.twig.html [output.latte]

Conversion

La conversion nécessite une édition manuelle du résultat, car la conversion ne peut pas être faite sans ambiguïté. Twig utilise la syntaxe par points, où {{ a.b }} peut signifier $a->b, $a['b'] ou $a->getB(), ce qui ne peut être distingué lors de la compilation. Le convertisseur convertit donc tout en $a->b.

Certaines fonctions, filtres ou balises n'ont pas d'équivalent dans Latte, ou peuvent se comporter de manière légèrement différente.

Exemple

Le fichier d'entrée pourrait ressembler à ceci :

{% 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>

Après avoir converti en Latte, nous obtenons ce modèle :

{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>