index
index.html.twig (Galerie)
{# On inclut Bootstrap et le CSS perso #}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="{{ asset('css/galerie.css') }}" rel="stylesheet" />
<div class="container mt-5">
<div class="text-center mb-5">
<h1 class="display-4">Ma Galerie d'images</h1>
<p class="lead text-muted">Page {{ page }}</p>
</div>
<div class="row">
{% for uneImage in images %}
<div class="col-md-4 col-sm-6 mb-4">
<div class="card h-100 shadow-sm hover-effect">
<img src="{{ asset('images/' ~ uneImage.url) }}"
class="card-img-top"
alt="{{ uneImage.titre }}"
style="height: 225px; object-fit: cover;">
<div class="card-body d-flex flex-column">
<h5 class="card-title text-center">{{ uneImage.titre }}</h5>
{# Affichage de l'auteur via la relation #}
<p class="card-text text-center text-muted small mt-auto">
<i class="bi bi-person"></i> Par : <strong>{{ uneImage.auteur.nom }}</strong>
</p>
</div>
</div>
</div>
{% else %}
<div class="col-12">
<div class="alert alert-warning text-center" role="alert">
Aucune image trouvée dans la base de données.
<br>Commence par <a href="{{ path('ajout_image') }}">ajouter une image</a>.
</div>
</div>
{% endfor %}
</div>
{# Navigation / Pagination #}
<div class="d-flex justify-content-between align-items-center mt-4 mb-5 p-3 bg-light rounded shadow-sm">
{% if page > 1 %}
<a href="{{ path('accueil_galerie', {'page': page - 1}) }}" class="btn btn-outline-secondary">
← Précédent
</a>
{% else %}
<span class="text-muted disabled">← Précédent</span>
{% endif %}
<a href="{{ path('accueil_galerie', {'page': page + 1}) }}" class="btn btn-outline-primary">
Suivant →
</a>
<a href="{{ path('ajout_image') }}" class="btn btn-success">
+ Ajouter une image
</a>
<a href="{{ path('ajout_auteur') }}" class="btn btn-outline-dark ms-2">
+ Nouvel Auteur
</a>
</div>
</div>
explication
Le fichier index.html.twig de la galerie est la page d'accueil de l'application. C'est ici que toutes les images stockées en base de données sont affichées sous forme de grille.