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
Notre mission a été particulièrement passionnante car Faume a pris la décision de migrer d’un modèle « agence » vers un modèle « SaaS ». Nous avons été sollicité pour challenger leur architecture actuelle basée sur Symfony et examiner leur feuille de route. Après un audit technique, nous avons identifié les principaux chantiers et scénarios…
Cacharel, marque emblématique du prêt-à-porter féminin et du parfum, s’associe à JoliCode pour accélérer son virage digital et renouer avec les jeunes femmes après trois ans d’absence. Avec une nouvelle direction artistique, l’objectif est de proposer une collection moderne tout en restant fidèle à l’héritage de la marque. Pour accompagner cette renaissance, …
La société AramisAuto a fait appel à JoliCode pour développer au forfait leur plateforme B2B. L’objectif était de développer une nouvelle offre à destination des professionnels ; déjà testé commercialement, pro.aramisauto.com est la concrétisation de 3 mois de développement. Le service est indépendant de l’infrastructure existante grâce à la mise en…