J'ai un formulaire de contact et j'essaye de mettre une classe dans une entrée de mon formulaire.
C'est dans le ContactType:
<input type="text" class="form-control" id="contact_name" name="contact[name]" required="required" placeholder="name">
Et ceci dans ma brindille:
{{ form_start(form) }} {{ form_widget(form.name, {attr: {class: 'myclass', placeholder: 'name'} }) }} {{ form_end(form) }}
Je reçois ce html:
public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('name', TextType::class); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Contact::class, ]); }
Cela fonctionne pour l'espace réservé, mais pas pour la classe. J'ai essayé de mettre l'attr dans le constructeur et c'est pareil. La classe form-control
écrase-t-elle ma classe? Comment puis-je résoudre ce problème?
4 Réponses :
Essayez ceci si cela peut vous aider
{{ form_start(form) }} {{ form_widget(form.name, {'attr': {'class': 'input-text input-text--white', 'placeholder': 'name'} }) }} {{ form_end(form) }}
C'est la même chose avec ou sans guillemets. Notez qu'il obtient l'espace réservé.
Je pense que vous ne pouvez pas définir deux attributs sur form_wdiget
. La façon de contourner cela consiste à faire les deux dans FormBuilder ou dans FormBuilder.
Vous pouvez définir des attributs sur un élément de formulaire comme ceci:
$builder ->add('name', TextType::class, [ 'attr' => [ 'class' => 'my-class', ], 'placeholder' => 'My place holder', ]);
Notez que pour un CSS class, il doit être dans le tableau attr
, à ne pas confondre avec une classe comme dans votre entité comme sur le EntityType::class
.
Ou
$builder ->add('name', TextType::class, [ 'placeholder' => 'My place holder', ]);
Vous pouvez donc réaliser les deux comme:
$builder ->add('name', TextType::class, [ 'attr' => [ 'class' => 'my-class', ], ]);
Vous pouvez en savoir plus sur les attributs de champ de formulaire ici .
Merci d'avoir répondu. J'ai essayé aussi ces options, mais le résultat est le même.
Avez-vous supprimé «attr» de form_widget lorsque vous avez essayé mes suggestions?
Oui je l'ai fait. Au début, je pensais aussi que c'était le problème.
Je pense que vous utilisez un thème de formulaire bootstrap, vérifiez dans le fichier de configuration.
et si c'est le cas, vous pouvez ajouter cette ligne en haut de votre fichier twig:
{% form_theme form 'form_div_layout.html.twig'%}
Oui! Le problème était qu'il n'avait pas le formulaire de thème par défaut. J'ai résolu avec ça, merci.
Vous pouvez le lire sur la page officielle: https://symfony.com/doc/current/reference/ forms / types / form.html # attr
Ajoutez simplement: {'attr': {'attribute name': 'value'}}
Comme indiqué ci-dessous
< pré> XXX
Doublon possible de Comment définir un attribut de classe sur une entrée de formulaire Symfony2
Il devrait y avoir plus à votre constructeur que la ligne que vous nous avez donnée, le contrôle de formulaire ne vient pas de nulle part, qu'en est-il de l'ajout de la classe au constructeur?
@DylanKas j'ai essayé d'ajouter la classe dans le constructeur et c'est pareil
Je suppose que la classe "form-control" vient de votre thème de formulaire global (qui peut être quelque chose que vous avez écrit vous-même ou simplement en utilisant un prédéfini comme bootstrap qui fait ce genre d'ajouts). Le thème du formulaire serait donc l'endroit idéal pour résoudre ce problème (soit en corrigeant le vôtre - soit en étendant et en corrigeant celui prédéfini).