Kontynuujemy poznawanie Symfony oraz twiga, zamieniając poprzednie metody na takie, które renderują template. Do dzieła.
Ok, najpierw ta metoda:
#[Route('/names', name: 'app_names_all', methods: ['GET', 'HEAD'])]
public function namesAll(): Response
{
return new Response(implode(',', $this->names));
}
Ok, tworzymy twig template:
{% extends 'base.html.twig' %}
{% block title %}Hello HelloController!{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
<h1>Names all</h1>
{% if names|length > 0 %}
{% for name in names %}
<p>{{name}}</p>
{% endfor %}
{% else %}
<p>No names</p>
{% endif %}
</div>
{% endblock %}
Tak wygląda pętla for. Teraz zmieniamy metodę:
#[Route('/names', name: 'app_names_all', methods: ['GET', 'HEAD'])]
public function namesAll(): Response
{
return $this->render('hello/namesall.html.twig', [
'names' => $this->names,
]);
}
W moim przypadku gryzło się, bo druga metoda, którą się zaraz zajmiemy też miała taki sam name przez przypadek, zmieńmy to:
#[Route('/nameslimited/{limit?3}', name: 'app_names_ltd', methods: ['GET', 'HEAD'])]
public function namesLimited(int $limit): Response
{
return new Response(implode(',',array_slice($this->names, 0, $limit)));
}
Ok, działa. Teraz zabieramy się za namesLimited.
Tworzymy nowy twig template:
{% extends 'base.html.twig' %}
{% block title %}Hello HelloController!{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
<h1>Names all</h1>
{% if names|length > 0 %}
{% for name in names|slice(0, limit) %}
<p>{{name}}</p>
{% endfor %}
{% else %}
<p>No names</p>
{% endif %}
</div>
{% endblock %}
Ok, pora dostosować metodę:
#[Route('/nameslimited/{limit?3}', name: 'app_names_ltd', methods: ['GET', 'HEAD'])]
public function namesLimited(int $limit): Response
{
return $this->render(
'hello/namesltd.html.twig',
[
'names' => array_slice($this->names, 0, $limit),
'limit' => $limit
]
);
}
Działa. Poznaliśmy też filtry twiga (twig jest bardzo podobny do templatkowych silników języka Python). Więcej Symfony już niedługo.