1
votes

Comment inclure un attribut 'classe' rendant un formulaire

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 commentaires

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).


4 Réponses :


1
votes

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) }}


1 commentaires

C'est la même chose avec ou sans guillemets. Notez qu'il obtient l'espace réservé.



1
votes

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 .


3 commentaires

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.



2
votes

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'%}


1 commentaires

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.



1
votes

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


0 commentaires