Sonata : Ajouter un panel d’administration sans entité avec Sonata Admin 5 et Symfony 6.2

Dans cet article, nous allons apprendre comment ajouter un panel d’administration sans entité dans un projet Symfony 6.2 en utilisant Sonata Admin 5.

Notre base de projet sera de créer une interface d’upload de fichier simple. Mais vous pouvez faire n’importe quelle application. Y compris ajouter un simple texte.

1. Installation de Sonata Admin Bundle

Si vous n’avez pas déjà installé Sonata Admin, vous pouvez le faire avec composer :

composer require sonata-project/admin-bundle

Je vous invite à parcourir notre site pour installer Sonata Admin Bundle proprement. ici

2. Création d’une classe Admin

Dans votre dossier src/Admin, créez un nouveau fichier UploadFileAdmin.php:

<?php
// src/Admin/UploadFileAdmin.php

namespace App\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Route\RouteCollectionInterface;

class UploadFileAdmin extends AbstractAdmin
{
    protected $baseRouteName = 'upload_file';
    protected $baseRoutePattern = 'upload-file';

    protected function configureRoutes(RouteCollectionInterface $collection): void
    {
        $collection
            ->remove('create')
            ->remove('delete')
            ->remove('edit')
            ->remove('export')
            ->remove('list')
            ->remove('batch')
            ->remove('show')
            ->add('upload');
    }
}

Dans cette classe, nous avons supprimé toutes les actions CRUD par défaut de Sonata Admin et ajouté une nouvelle action upload.

3. Création d’un Controller Admin

Dans le dossier src/Controller/Admin, créez un nouveau fichier UploadFileController.php:

<?php
// src/Admin/UploadFileController.php

namespace App\Admin;

use Sonata\AdminBundle\Controller\CRUDController;
use Symfony\Component\HttpFoundation\Response;

class UploadFileController extends CRUDController
{
    public function uploadAction()
    {

        return $this->renderWithExtraParams('admin/upload.html.twig', [
            'title'=> 'Upload de fichier excell'
        ]

        );
    }
}

Dans ce controller, nous avons défini une action upload qui affiche une vue upload.html.twig.

4. Création d’un template pour l’action upload

Créez un nouveau fichier templates/admin/upload.html.twig:

{# templates/admin/upload.html.twig #}

{% extends '@SonataAdmin/standard_layout.html.twig' %}

{% block title %} - {{ title }}{% endblock %}

{% block breadcrumb %}
    <li><a href="/admin/dashboard"><i class="fa fa-home"></i></a></li>
    <li class="active"><span>{{ title }}</span></li>
{% endblock %}

{% block sonata_page_title %}
    <h2 class="sonata-page-title">
        {{ title }}
    </h2>
{% endblock %}

{% block sonata_page_content %}
    <section class="content">
        <div class="box box-success">
            <div class="box-header with-border">
                <h3 class="box-title">Contenu supplémentaire</h3>
            </div>
            <div class="box-body">
                Ici, vous pouvez ajouter du contenu supplémentaire.
            </div>
        </div>
    </section>
{% endblock %}

5. Déclaration du service Admin

Dans le fichier config/services.yaml, ajoutez la déclaration de votre service admin :

services:
    app.admin.upload_file:
        class: App\Admin\UploadFileAdmin
        arguments: [~, Symfony\Component\HttpFoundation\File\File, App\Admin\UploadFileController]
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Contenu", label: "Upload fichier excell" }

Notez que dans les arguments, nous utilisons Symfony\Component\HttpFoundation\File\File comme placeholder pour l’entité. Comme nous n’utilisons pas d’entité, cela n’a pas d’importance.

6. Configuration de Sonata Admin

Pour finir, nous allons ajouter notre nouvel admin au tableau de bord de Sonata Admin. Modifiez le fichier config/packages/sonata_admin.yaml :

sonata_admin:
    dashboard:
        groups:
            uploads:
                label: Uploads
                icon: '<i class="fa fa-upload"></i>'
                items:
                    - route: upload_file_upload
                      label: "Upload fichier excell"

7. Ajout d’une action personnalisée à votre tableau de bord

Modifiez votre classe UploadFileAdmin pour inclure la méthode configureDashboardActions :

// src/Admin/UploadFileAdmin.php

// ...

class UploadFileAdmin extends AbstractAdmin
{
    // ...

    protected function configureDashboardActions(array $actions): array
    {
        $actions['upload'] = [
            'template' => 'admin/dashboard_upload_action.html.twig',
            'label'    => 'Chargement des fichiers',
            'icon'     => 'fa-upload',
            'route'    => 'upload'
        ];

        return $actions;
    }
}

Dans cette méthode, nous avons ajouté une action personnalisée upload à notre tableau de bord.

8. Création du template pour l’action personnalisée

Créez un nouveau fichier templates/admin/dashboard_upload_action.html.twig :

<a class="btn btn-link btn-flat" href="{{ admin.generateUrl(action.route) }}">
    <i class="fas {{ action.icon | default('')}}"></i>
    {{ action.label | default('') | trans({}, 'default') }}
</a>

Ce template sera utilisé pour afficher le bouton d’action personnalisée sur le tableau de bord.

Selection_018

Maintenant, lorsque vous naviguez vers /admin/dashboard, vous devriez voir un nouveau bouton « Chargement des fichiers » sur votre tableau de bord. En cliquant sur ce bouton, vous devriez être redirigé vers votre page d’upload.

Selection_017

Et voilà ! Vous avez réussi à créer un panel d’administration sans entité dans Sonata Admin. Cela peut être très utile pour ajouter des fonctionnalités personnalisées à votre panel d’admin.