Nette Documentation Preview

syntax
Utilisation de Latte avec Slim 4
********************************

.[perex]
Cet article, dont l'auteur est "Daniel Opitz":https://odan.github.io/2022/04/06/slim4-latte.html, décrit l'utilisation de Latte avec le Slim Framework.

Tout d'abord, "installez le Slim Framework":https://odan.github.io/2019/11/05/slim4-tutorial.html puis Latte en utilisant Composer :

```shell
composer require latte/latte
```


Configuration
-------------

Dans le répertoire racine du projet, créez un nouveau répertoire `templates`. Tous les templates y seront placés ultérieurement.

Dans le fichier `config/defaults.php`, ajoutez une nouvelle clé de configuration `template` :

```php
$settings['template'] = __DIR__ . '/../templates';
```

Latte compile les templates en code PHP natif et les stocke dans un cache sur le disque. Ils sont donc aussi rapides que s'ils avaient été écrits en PHP natif.

Dans le fichier `config/defaults.php`, ajoutez une nouvelle clé de configuration `template_temp` : Assurez-vous que le répertoire `{project}/tmp/templates` existe et dispose des droits de lecture et d'écriture.

```php
$settings['template_temp'] = __DIR__ . '/../tmp/templates';
```

Latte régénère automatiquement le cache à chaque modification du template, ce qui peut être désactivé en environnement de production pour économiser un peu de performance :

```php
// en environnement de production, changez en false
$settings['template_auto_refresh'] = true;
```

Ensuite, ajoutez la définition du conteneur DI pour la classe `Latte\Engine`.

```php
<?php

use Latte\Engine;
use Latte\Loaders\FileLoader;
use Psr\Container\ContainerInterface;
// ...

return [

	// ...

	Engine::class => function (ContainerInterface $container) {
		$latte = new Engine();
		$settings = $container->get('settings');
		$latte->setLoader(new FileLoader($settings['template']));
		$latte->setTempDirectory($settings['template_temp']);
		$latte->setAutoRefresh($settings['template_auto_refresh']);

		return $latte;
	},
];
```

Le rendu du template Latte lui-même fonctionnerait techniquement, mais nous devons également nous assurer qu'il fonctionne avec l'objet de réponse PSR-7.

À cette fin, nous allons créer une classe spéciale `TemplateRenderer` qui fera ce travail pour nous.

Ensuite, créez le fichier `src/Renderer/TemplateRenderer.php` et copiez/collez ce code :

```php
<?php

namespace App\Renderer;

use Latte\Engine;
use Psr\Http\Message\ResponseInterface;

final class TemplateRenderer
{
	public function __construct(
		private Engine $engine,
	) {
	}

	public function template(
		ResponseInterface $response,
		string $template,
		array $data = [],
	): ResponseInterface
	{
		$string = $this->engine->renderToString($template, $data);
		$response->getBody()->write($string);

		return $response;
	}
}
```


Utilisation
-----------

Au lieu d'utiliser directement l'objet Latte Engine, nous utiliserons l'objet `TemplateRenderer` pour rendre le template dans un objet compatible PSR-7.

Une classe de gestionnaire d'action typique pourrait ressembler à ceci : Elle rendra le template nommé `home.latte` :

```php
<?php

namespace App\Action\Home;

use App\Renderer\TemplateRenderer;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

final class HomeAction
{
	public function __construct(
		private TemplateRenderer $renderer,
	) {
	}

	public function __invoke(
		ServerRequestInterface $request,
		ResponseInterface $response,
	): ResponseInterface
	{
		$viewData = [
			'items' => ['one', 'two', 'three'],
		];

		return $this->renderer->template($response, 'home.latte', $viewData);
	}
}
```

Pour que cela fonctionne, créez le fichier de template dans `templates/home.latte` avec ce contenu :

```latte
<ul n:if=$items>
	{foreach $items as $item}
		<li id="item-{$iterator->counter}">{$item|capitalize}</li>
	{/foreach}
</ul>
```

Si tout est correctement configuré, la sortie suivante devrait s'afficher :

```latte
One
Two
Three
```

{{priority: -1}}
{{leftbar: /@left-menu}}

Utilisation de Latte avec Slim 4

Cet article, dont l'auteur est Daniel Opitz, décrit l'utilisation de Latte avec le Slim Framework.

Tout d'abord, installez le Slim Framework puis Latte en utilisant Composer :

composer require latte/latte

Configuration

Dans le répertoire racine du projet, créez un nouveau répertoire templates. Tous les templates y seront placés ultérieurement.

Dans le fichier config/defaults.php, ajoutez une nouvelle clé de configuration template :

$settings['template'] = __DIR__ . '/../templates';

Latte compile les templates en code PHP natif et les stocke dans un cache sur le disque. Ils sont donc aussi rapides que s'ils avaient été écrits en PHP natif.

Dans le fichier config/defaults.php, ajoutez une nouvelle clé de configuration template_temp : Assurez-vous que le répertoire {project}/tmp/templates existe et dispose des droits de lecture et d'écriture.

$settings['template_temp'] = __DIR__ . '/../tmp/templates';

Latte régénère automatiquement le cache à chaque modification du template, ce qui peut être désactivé en environnement de production pour économiser un peu de performance :

// en environnement de production, changez en false
$settings['template_auto_refresh'] = true;

Ensuite, ajoutez la définition du conteneur DI pour la classe Latte\Engine.

<?php

use Latte\Engine;
use Latte\Loaders\FileLoader;
use Psr\Container\ContainerInterface;
// ...

return [

	// ...

	Engine::class => function (ContainerInterface $container) {
		$latte = new Engine();
		$settings = $container->get('settings');
		$latte->setLoader(new FileLoader($settings['template']));
		$latte->setTempDirectory($settings['template_temp']);
		$latte->setAutoRefresh($settings['template_auto_refresh']);

		return $latte;
	},
];

Le rendu du template Latte lui-même fonctionnerait techniquement, mais nous devons également nous assurer qu'il fonctionne avec l'objet de réponse PSR-7.

À cette fin, nous allons créer une classe spéciale TemplateRenderer qui fera ce travail pour nous.

Ensuite, créez le fichier src/Renderer/TemplateRenderer.php et copiez/collez ce code :

<?php

namespace App\Renderer;

use Latte\Engine;
use Psr\Http\Message\ResponseInterface;

final class TemplateRenderer
{
	public function __construct(
		private Engine $engine,
	) {
	}

	public function template(
		ResponseInterface $response,
		string $template,
		array $data = [],
	): ResponseInterface
	{
		$string = $this->engine->renderToString($template, $data);
		$response->getBody()->write($string);

		return $response;
	}
}

Utilisation

Au lieu d'utiliser directement l'objet Latte Engine, nous utiliserons l'objet TemplateRenderer pour rendre le template dans un objet compatible PSR-7.

Une classe de gestionnaire d'action typique pourrait ressembler à ceci : Elle rendra le template nommé home.latte :

<?php

namespace App\Action\Home;

use App\Renderer\TemplateRenderer;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

final class HomeAction
{
	public function __construct(
		private TemplateRenderer $renderer,
	) {
	}

	public function __invoke(
		ServerRequestInterface $request,
		ResponseInterface $response,
	): ResponseInterface
	{
		$viewData = [
			'items' => ['one', 'two', 'three'],
		];

		return $this->renderer->template($response, 'home.latte', $viewData);
	}
}

Pour que cela fonctionne, créez le fichier de template dans templates/home.latte avec ce contenu :

<ul n:if=$items>
	{foreach $items as $item}
		<li id="item-{$iterator->counter}">{$item|capitalize}</li>
	{/foreach}
</ul>

Si tout est correctement configuré, la sortie suivante devrait s'afficher :

One
Two
Three