Je suis le tuto sur Symfony 7, après avoir installé vitch pour la gestion de mes images, j'ai crée une DTO.
mais quand j'essaie d'afficher l'image j'ai une erreur
ma DTO
<?php
namespace App\DTO;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
#[Vich\Uploadable]
class CategoriesWithCountDTO
{
public function __construct(
public readonly int $id,
public readonly string $titre,
public readonly string $thumbnail,
public readonly string $descriptif,
public readonly int $count
) {
}
}
dans mon controller
#[Route(name: 'index')]
public function index(Request $request, CategoriesRepository $categoriesRepository): Response
{
$page = $request->query->getInt('page', 1);
$limit = 10;
$categorie = $categoriesRepository->paginateCategoriesWithCount($page, $limit);
$maxPage = ceil($categorie->getTotalItemCount()/ $limit);
return $this->render('admin/categorie/index.html.twig', [
'categories' => $categorie
]);
}
mon template twig
<article>
<table class="table">
<thead>
<tr>
<th>
Noms
</th>
<th>
Émissions
</th>
<th style="width: 200px">
Actions
</th>
</tr>
</thead>
<tbody>
{% for categorie in categories %}
<tr>
<td>
<a href="{{ path('admin.categorie.edit', {id: categorie.id }) }}">
{{ categorie.titre }}
</a>
{# {{ dump(categorie) }} #}
<p>
{% if categorie.thumbnail %}
---> <img src="{{ vich_uploader_asset(categorie, 'thumbnailFile') }}" alt="Photo de {{ categorie.titre }}">
{% endif %}
{{ categorie.descriptif }}
</p>
</td>
<td>
{{ categorie.count }}
</td>
<td>
<div class="d-flex gap-1">
<a class="btn btn-primary btn-sm" href="{{ path('admin.categorie.edit', {id: categorie.id}) }}">
Éditer
</a>
<form action="{{ path('admin.categorie.delete', {id: categorie.id}) }}" method="post">
<input type="hidden" name="_method" value="DELETE">
<button type="submit" class="btn btn-danger btn-sm">
Supprimer
</button>
</form>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{{ knp_pagination_render(categories) }}
</article>
(flêche sur la ligne qui fait bugguer)
mon vitch_uploader.yaml
vich_uploader:
db_driver: orm
mappings:
emissions:
uri_prefix: /images/emissions
upload_destination: '%kernel.project_dir%/public/images/emissions'
namer:
service: Vich\UploaderBundle\Naming\PropertyNamer
options: { property: 'titre'}
categories:
uri_prefix: /images/categories
upload_destination: '%kernel.project_dir%/public/images/categories'
namer:
service: Vich\UploaderBundle\Naming\PropertyNamer
options: { property: 'titre'}
Ce que je veux
j'aimerais que mon image s'affiche, d'ailleurs, ça marche quand j'utilise pas de DTO, donc je me dit que j'ai dû oublier quelque chose ....
Par exemple l'affichage d'images pour émission marche parfaitement bien.
Ce que j'obtiens
j'obtiens l'erreur suivante :
"MappingNotFoundException RuntimeError HTTP 500 Internal Server Error
An exception has been thrown during the rendering of a template ("Mapping not found for field "thumbnailFile"").
Quelqu'un a une idée ?
Salut,
Juste une piste à creuser...
vich_uploader:
db_driver: orm
mappings:
emissions:
uri_prefix: /images/emissions
upload_destination: '%kernel.project_dir%/public/images/emissions'
namer:
service: Vich\UploaderBundle\Naming\PropertyNamer
options: { property: 'titre'}
categories:
uri_prefix: /images/categories
upload_destination: '%kernel.project_dir%/public/images/categories'
namer:
service: Vich\UploaderBundle\Naming\PropertyNamer
options: { property: 'titre'}
> thumbnailFile:
.........
En ajoutant le thumbnailFile, il devrait trouver ton mapping ?
L'erreur te dit qu'il ne trouve pas ton mapping dans ta config, et en effet, elle n'y est pas.