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
JoliCode a assuré le développement et les évolutions d’une des API centrale de l’épargne salariale chez Groupama. Cette API permet à plusieurs applications de récupérer des informations et d’alimenter en retour le centre de donnée opérationnel. Cette pièce applicative centrale permet de développer rapidement des applications avec une source de vérité…
Travailler sur un projet US présente plusieurs défis. En premier lieu : Le décalage horaire. Afin d’atténuer cet obstacle, nous avons planifié les réunions en début d’après-midi en France, ce qui permet de trouver un compromis acceptable pour les deux parties. Cette approche assure une participation optimale des deux côtés et facilite la communication…
JoliCode a formé l’équipe de développement d’Evaneos aux bonnes pratiques pour l’écriture de tests unitaires efficaces et utiles. Nous en avons également profité pour mettre en place une plateforme d’intégration continue pour accompagner l’évolution de la plateforme.