Χρήση του 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