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.