Zaczynamy zabawy bazodanowe w Symfony. Wykorzystamy już istniejące entity, do którego napisaliśmy poprzednio fixture. Do dzieła.

Ok, zaczynamy od komendy:

symfony console make:controller

Jako nazwę podajemy MicroPostController. Przechodzimy do kontrolera:

class MicroPostController extends AbstractController
{
    #[Route('/micro/post', name: 'app_micro_post')]
    public function index(): Response
    {
        return $this->render('micro_post/index.html.twig', [
            'controller_name' => 'MicroPostController',
        ]);
    }
}

Zmieniamy route:

class MicroPostController extends AbstractController
{
    #[Route('/micro/post', name: 'app_micro_post')]
    public function index(): Response
    {
        return $this->render('micro_post/index.html.twig', [
            'controller_name' => 'MicroPostController',
        ]);
    }
}

Importujemy repozytorium, wstrzykujemy przez konstruktor, używamy metody findAll:

use App\Repository\MicroPostRepository;

class MicroPostController extends AbstractController
{
    #[Route('/micro_post', name: 'app_micro_post')]
    public function index(MicroPostRepository $repository): Response
    {
        dd($repository->findAll());
        return $this->render('micro_post/index.html.twig', [
            'controller_name' => 'MicroPostController',
        ]);
    }
}

Ok, jak działa, to pora wyświetlić w template:

{% extends 'base.html.twig' %}

{% block title %}Hello MicroPostController!{% 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">
    {% if posts|length > 0 %}
    {% for post in posts %}
      <h3>{{ post.title }}</h3>
      <p>{{post.content}}</p>
    {% endfor %}
  {% else %}
            <p>No posts</p>
    {% endif %}
</div>
{% endblock %}

Teraz tylko dostosować metodę:

#[Route('/micro_post', name: 'app_micro_post')]
    public function index(MicroPostRepository $repository): Response
    {
        
        return $this->render('micro_post/index.html.twig', [
            'posts' => $repository->findAll(),
        ]);
    }

I działa.