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 :

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 !
Symfony
Formez-vous à Symfony, l’un des frameworks Web PHP les complet au monde
Symfony avancée
Découvrez les fonctionnalités et concepts avancés de Symfony
Ces clients ont profité de notre expertise
Pour renforcer Ouranos, le référentiel de données dédié à la signalisation ferroviaire, SNCF Réseau a sollicité JoliCode afin d’auditer et améliorer la qualité technique de l’application. Développée en Symfony et API Platform, Ouranos est au cœur des processus de production, utilisé aussi bien en interne que par l’industrie. Notre intervention s’est…
Nous avons construit un extranet afin de de simplifier les tâches quotidiennes de gestion, que ce soit pour les utilisateurs (départements, associations, mandataires, accueillants et accueillis) et l’équipe de Cettefamille. Le socle technique utilisé est Symfony, PostgreSQL, Webpack, VanillaJS. L’emploi de ces technologies modernes permet aujourd’hui…
La nouvelle version du site naissance.fr développée s’appuie sur Symfony 2 et Elasticsearch. Cette refonte propose un tunnel d’achat spécialement développé pour l’application. Aujourd’hui, le site est équipé d’une gestion d’un mode d’envoi des faire-parts différé, de modification des compositions après paiement et de prise en charge de codes promotionnels…