Χρήση του Latte με το Slim 4
Αυτό το άρθρο, του οποίου ο συγγραφέας είναι ο Daniel Opitz, περιγράφει τη χρήση του Latte με το Slim Framework.
Πρώτα, install the Slim Framework και στη συνέχεια το Latte χρησιμοποιώντας το Composer:
composer require latte/latte
Διαμόρφωση
Στον ριζικό κατάλογο του έργου, δημιουργήστε έναν νέο κατάλογο
templates
. Όλα τα templates θα τοποθετηθούν εκεί αργότερα.
Στο αρχείο config/defaults.php
, προσθέστε ένα νέο κλειδί διαμόρφωσης
template
:
$settings['template'] = __DIR__ . '/../templates';
Το Latte μεταγλωττίζει τα templates σε εγγενή κώδικα PHP και τα αποθηκεύει σε μια προσωρινή μνήμη στον δίσκο. Επομένως, είναι τόσο γρήγορα όσο αν είχαν γραφτεί σε εγγενή γλώσσα PHP.
Στο αρχείο config/defaults.php
, προσθέστε ένα νέο κλειδί διαμόρφωσης
template_temp
: Βεβαιωθείτε ότι ο κατάλογος {project}/tmp/templates
υπάρχει και έχει δικαιώματα ανάγνωσης και εγγραφής.
$settings['template_temp'] = __DIR__ . '/../tmp/templates';
Το Latte αναδημιουργεί αυτόματα την προσωρινή μνήμη κάθε φορά που αλλάζει το template, κάτι που μπορεί να απενεργοποιηθεί σε περιβάλλον παραγωγής για εξοικονόμηση λίγης απόδοσης:
// change to false in production environment
$settings['template_auto_refresh'] = true;
Στη συνέχεια, προσθέστε τον ορισμό του DI container για την κλάση
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;
},
];
Η ίδια η απόδοση του template 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
για να αποδώσουμε το
template σε ένα αντικείμενο συμβατό με PSR-7.
Μια τυπική κλάση χειριστή ενέργειας μπορεί να μοιάζει ως εξής:
Αποδίδει ένα template με όνομα 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);
}
}
Για να λειτουργήσει αυτό, δημιουργήστε ένα αρχείο template στο
templates/home.latte
με αυτό το περιεχόμενο:
<ul n:if=$items>
{foreach $items as $item}
<li id="item-{$iterator->counter}">{$item|capitalize}</li>
{/foreach}
</ul>
Εάν όλα έχουν διαμορφωθεί σωστά, θα πρέπει να εμφανιστεί η ακόλουθη έξοδος:
Ένα
Δύο
Τρία