Nette Documentation Preview

syntax
Χρήση του Latte με το Slim 4
****************************

.[perex]
Αυτό το άρθρο που γράφτηκε από  τον "Daniel Opitz":https://odan.github.io/2022/04/06/slim4-latte.html περιγράφει τον τρόπο χρήσης του Latte με το Slim Framework.

Πρώτα, "εγκαταστήστε το Slim Framework":https://odan.github.io/2019/11/05/slim4-tutorial.html και στη συνέχεια το Latte χρησιμοποιώντας το Composer:

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


Configuration .[#toc-configuration]
-----------------------------------

Δημιουργήστε έναν νέο κατάλογο `templates` στον ριζικό κατάλογο του έργου σας. Όλα τα πρότυπα θα τοποθετηθούν εκεί αργότερα.

Προσθέστε ένα νέο κλειδί διαμόρφωσης `template` στο αρχείο `config/defaults.php`:

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

Το Latte μεταγλωττίζει τα πρότυπα σε εγγενή κώδικα PHP και τα αποθηκεύει σε μια κρυφή μνήμη στο δίσκο. Έτσι, είναι τόσο γρήγορα όσο και αν είχαν γραφτεί σε εγγενή PHP.

Προσθέστε ένα νέο κλειδί ρυθμίσεων `template_temp` στο αρχείο `config/defaults.php`: Βεβαιωθείτε ότι ο κατάλογος `{project}/tmp/templates` υπάρχει και έχει δικαιώματα πρόσβασης ανάγνωσης και εγγραφής.

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

Το Latte αναγεννά αυτόματα την προσωρινή μνήμη κάθε φορά που αλλάζετε το πρότυπο, κάτι που μπορεί να απενεργοποιηθεί στο περιβάλλον παραγωγής για να εξοικονομήσετε λίγη απόδοση:

```php
// αλλαγή σε false στο περιβάλλον παραγωγής
$settings['template_auto_refresh'] = true;
```

Στη συνέχεια, προσθέστε έναν ορισμό δοχείου DI για την κλάση `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;
	},
];
```

Αυτό από μόνο του θα λειτουργούσε τεχνικά για την απόδοση ενός προτύπου Latte, αλλά πρέπει επίσης να το κάνουμε να λειτουργήσει με το αντικείμενο απόκρισης PSR-7.

Για το σκοπό αυτό δημιουργούμε μια ειδική κλάση `TemplateRenderer` η οποία κάνει αυτή τη δουλειά για εμάς.

Έτσι, στη συνέχεια δημιουργήστε ένα αρχείο στο `src/Renderer/TemplateRenderer.php` και αντιγράψτε/επικολλήστε αυτόν τον κώδικα:

```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;
	}
}
```


Χρήση .[#toc-usage]
-------------------

Αντί να χρησιμοποιήσουμε απευθείας το αντικείμενο Latte Engine χρησιμοποιούμε το αντικείμενο `TemplateRenderer` για την απόδοση του προτύπου σε ένα αντικείμενο συμβατό με το PSR-7.

Μια τυπική κλάση χειριστή ενεργειών μπορεί να μοιάζει ως εξής για την απόδοση ενός προτύπου με το όνομα `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);
	}
}
```

Για να λειτουργήσει, δημιουργήστε ένα αρχείο προτύπου στο `templates/home.latte` με αυτό το περιεχόμενο:

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

Αν όλα έχουν ρυθμιστεί σωστά, θα πρέπει να δείτε την ακόλουθη έξοδο:

```latte
One
Two
Three
```

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

Χρήση του Latte με το Slim 4

Αυτό το άρθρο που γράφτηκε από τον Daniel Opitz περιγράφει τον τρόπο χρήσης του Latte με το Slim Framework.

Πρώτα, εγκαταστήστε το Slim Framework και στη συνέχεια το Latte χρησιμοποιώντας το Composer:

composer require latte/latte

Configuration

Δημιουργήστε έναν νέο κατάλογο templates στον ριζικό κατάλογο του έργου σας. Όλα τα πρότυπα θα τοποθετηθούν εκεί αργότερα.

Προσθέστε ένα νέο κλειδί διαμόρφωσης template στο αρχείο config/defaults.php:

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

Το Latte μεταγλωττίζει τα πρότυπα σε εγγενή κώδικα PHP και τα αποθηκεύει σε μια κρυφή μνήμη στο δίσκο. Έτσι, είναι τόσο γρήγορα όσο και αν είχαν γραφτεί σε εγγενή PHP.

Προσθέστε ένα νέο κλειδί ρυθμίσεων template_temp στο αρχείο config/defaults.php: Βεβαιωθείτε ότι ο κατάλογος {project}/tmp/templates υπάρχει και έχει δικαιώματα πρόσβασης ανάγνωσης και εγγραφής.

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

Το Latte αναγεννά αυτόματα την προσωρινή μνήμη κάθε φορά που αλλάζετε το πρότυπο, κάτι που μπορεί να απενεργοποιηθεί στο περιβάλλον παραγωγής για να εξοικονομήσετε λίγη απόδοση:

// αλλαγή σε false στο περιβάλλον παραγωγής
$settings['template_auto_refresh'] = true;

Στη συνέχεια, προσθέστε έναν ορισμό δοχείου DI για την κλάση 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;
	},
];

Αυτό από μόνο του θα λειτουργούσε τεχνικά για την απόδοση ενός προτύπου Latte, αλλά πρέπει επίσης να το κάνουμε να λειτουργήσει με το αντικείμενο απόκρισης PSR-7.

Για το σκοπό αυτό δημιουργούμε μια ειδική κλάση TemplateRenderer η οποία κάνει αυτή τη δουλειά για εμάς.

Έτσι, στη συνέχεια δημιουργήστε ένα αρχείο στο src/Renderer/TemplateRenderer.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;
	}
}

Χρήση

Αντί να χρησιμοποιήσουμε απευθείας το αντικείμενο Latte Engine χρησιμοποιούμε το αντικείμενο TemplateRenderer για την απόδοση του προτύπου σε ένα αντικείμενο συμβατό με το PSR-7.

Μια τυπική κλάση χειριστή ενεργειών μπορεί να μοιάζει ως εξής για την απόδοση ενός προτύπου με το όνομα 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);
	}
}

Για να λειτουργήσει, δημιουργήστε ένα αρχείο προτύπου στο templates/home.latte με αυτό το περιεχόμενο:

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

Αν όλα έχουν ρυθμιστεί σωστά, θα πρέπει να δείτε την ακόλουθη έξοδο:

One
Two
Three