3min.

Ajouter un champ de texte statique dans un formulaire EasyAdmin

EasyAdmin est un bundle Symfony qui permet de générer rapidement des interfaces d’administration pour votre application. Il propose de nombreux outils pour répondre aux besoins courants d’une interface d’administration : types de champs personnalisés, filtres, actions custom, layouts paramétrables avec des fieldsets, des onglets, des colonnes, etc.

Nous employons fréquemment EasyAdmin pour nos projets Symfony, et nous apprécions particulièrement sa simplicité d’utilisation et sa flexibilité. Cependant, il arrive parfois que nous ayons besoin d’ajouter des fonctionnalités qui ne sont pas directement supportées. Le bundle propose de nombreux moyens de personnaliser les formulaires : surcharge de templates, création de types de champs personnalisés, etc.

Nous avons récemment souhaité ajouter un champ de texte statique dans un formulaire EasyAdmin. Ce champ devait afficher une valeur non modifiable, provenant directement de l’entité, afin d’apporter davantage de confort à l’utilisateur.

Section intitulée creation-d-un-form-type-personnaliseCréation d’un Form Type personnalisé

Nous avons commencé par l’écriture d’un Form Type personnalisé, qui étend le champ TextType de Symfony. Ce champ TextType est un champ de texte classique, mais nous avons ajouté l’option « disabled » à true, pour empêcher l’utilisateur de modifier sa valeur.

<?php

namespace App\Type\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\OptionsResolver\OptionsResolver;

class StaticTextType extends AbstractType
{
    public function getParent(): ?string
    {
        return TextType::class;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'disabled' => true,
        ]);
    }
}

Une fois le type de champ ajouté, nous pouvons créer un « field » EasyAdmin pour faciliter l’intégration du Form Type dans les différents écrans de l’interface d’administration :

<?php

namespace App\Admin\Field;

use App\Form\Type\StaticTextType;
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface;
use EasyCorp\Bundle\EasyAdminBundle\Field\FieldTrait;

final class StaticTextField implements FieldInterface
{
    use FieldTrait;

    /**
     * @param string|false|null $label
     */
    public static function new(string $propertyName, $label = null): self
    {
        return (new self())
            ->setProperty($propertyName)
            ->setLabel($label)
            ->setFormType(StaticTextType::class)
        ;
    }
}

Section intitulée definition-du-template-associeDéfinition du template associé

Ensuite, nous avons créé un template Twig pour afficher le champ de texte statique. Ce template est très simple, il affiche simplement la valeur du champ :

# templates/admin/form-theme.html.twig
{% block static_text_widget %}
    {{~ value ~}}
{% endblock %}

Section intitulée utilisation-du-champ-dans-easyadminUtilisation du champ dans EasyAdmin

Dernière étape, l’ajout du champ de texte statique dans un des écrans de l’espace d’administration EasyAdmin. Pour cela, nous avons utilisé la configuration pour spécifier le type de champ à utiliser :

// src/Controller/Admin/CommentController.php
use App\Admin\Field\StaticTextField;

public function configureFields(string $pageName): iterable
{
    // ...
    yield StaticTextField::new('name');
    // ...
}

Afin que le rendu du champ de texte statique soit correct, nous devons déclarer quel est le thème de formulaire à utiliser pour ce champ.

// src/Controller/Admin/CommentController.php
public function configureCrud(Crud $crud): Crud
{
    return parent::configureCrud($crud)
        // ...
        ->setFormThemes(['admin/form-theme.html.twig'])
    ;
}

Et voilà ! Grâce à ces quelques étapes, nous avons pu ajouter un champ de texte statique dans un formulaire EasyAdmin. Cela permet d’afficher des informations non modifiables directement dans le formulaire, améliorant ainsi l’expérience utilisateur. Cette approche peut être employée pour afficher des informations provenant directement de l’entité, mais aussi d’entités liées :

Exemple d'un champ de texte statique dans un formulaire Easyadmin

Ainsi, au lieu d’utiliser un champ de type AssociationField classique qui aurait été désactivé afin de ne pas permettre sa modification, nous avons créé un champ spécifique qui correspondait exactement à nos besoins. En plus d’éviter de générer le code HTML d’un widget de formulaire désactivé, cette approche permet de clarifier l’intention du code et de rendre le formulaire plus lisible.

EasyAdmin est un outil d’une grande puissance, qui permet de créer des interfaces d’administration rapidement et efficacement. En combinant les fonctionnalités d’EasyAdmin avec des personnalisations spécifiques, il est possible de répondre à des besoins métier très rapidement et avec un haut niveau d’intégration, pour une expérience utilisateur optimale.

Commentaires et discussions

Nos formations sur ce sujet

Notre expertise est aussi disponible sous forme de formations professionnelles !

Voir toutes nos formations

Ces clients ont profité de notre expertise