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 ?

1 réponse


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.