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.