IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Masquer champs formulaire proprement [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut Masquer champs formulaire proprement
    Bonjour,

    Je bosses sur Symfony2 depuis 2 semaines, et je me pose une question.

    On va faire simple, j'ai une table news qui contient 5 champs :
    - ID
    - Titre
    - Contenu
    - Date
    - Auteur

    J'ai créé mon entité News et tout ce qui faut pour que ca fonctionne (formulaire, vue twig, type, handler, ...).

    Dans mon fichier NewsType, j'ai une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
            ->add('date',    'date', array('attr'=> array('style'=>'display:none')))
            ->add('titre',   'text')
            ->add('contenu', 'textarea', array('attr' => array('rows' => 5,'class' => 'field span8')))
            ->add('auteur',  'text');
     
        }
    Cependant, actuellement je ne laisse pas remplir la date à mes utilisateurs. Elle est donc remplie automatiquement lors de la validation du formulaire (dans mon NewsController).

    Ma question, si j'enlève le champs ->add('date'), Symfony m'affiche une erreur (il doit pas arriver à mapper ce $builder avec mon entité). Je suis "obliger" de passer par un champ display:none pour masquer ce champs.

    Est-ce une bonne méthode ?

    Car je trouve ça pas jolie du tout. Car si j'ai un objet qui contient 100 attributs, que 80 doivent être remplis automatiquement (je ne veux pas de valeur par défaut dans phpmyadmin), je me vois mal faire un display:none partout ...

    Merci d'avance
    Règle N° 1 : Si tout va bien, ne touchez à rien.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    Il n'y a aucune obligation à mapper tout les champs de ton entité à un formulaire.
    je mettrais simplement l'initialisation de date dans le constructeur de News.

    Quel est le message d'erreur exactement?

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Voilà ma page formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <form action="{{ path('news_ajouter') }}" method="post" {{ form_enctype(form) }}>	
            {{ form_label(form.auteur, 'Votre nom') }}
            {{ form_widget(form.auteur) }}
            {{ form_errors(form.auteur) }}
     
            {{ form_label(form.titre, 'Titre') }}
            {{ form_widget(form.titre) }}
            {{ form_errors(form.titre) }}
     
            {{ form_label(form.contenu, 'Contenu la news') }}
            {{ form_widget(form.contenu) }}
            {{ form_errors(form.contenu) }}
     
            {{ form_label(form.image.url, 'Chemin vers l\'image') }}
            {{ form_widget(form.image.url) }}
            {{ form_errors(form.image.url) }}
     
            {{ form_label(form.image.alt, 'Nom de votre image') }}
            {{ form_widget(form.image.alt) }}
            {{ form_errors(form.image.alt) }}
     
            {{ form_label(form.image.file, 'Choisisssez votre image') }}
            {{ form_widget(form.image.file) }}
            {{ form_errors(form.image.file) }}
     
            {# Le champs date est masquer #}
            {{ form_widget(form.date) }}
     
            <br/>
            {{ form_rest(form) }}
        <input type="submit" />
    Si je supprime la ligne ->add('date' ...), il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Method "date" for object "Symfony\Component\Form\FormView" does not exist in FeriaNewsBundle:News:ajouter.html.twig at line 12
    J'ai trouvé sur un forum qu'il fallait utiliser la propriété 'hidden' du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
        ->add('date', 'hidden');
    }
    Mais ca m'affiche cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class DateTime. You can avoid this error by setting the "data_class" option to "DateTime" or by adding a view transformer that transforms an instance of class DateTime to scalar, array or an instance of \ArrayAccess.
    Comment je peux faire ?

    J'ai une autre question. Actuellement j'affiche chaque champs de mon formulaire manuellement. Cependant si je ne met pas {{ form_rest(form) }} je ne peux pas valider la formulaire, il se passe rien.

    Y a-t-il des champs cacher qui permettent la validation ? J'ai cru entendre parler de jeton ou de CSFR ou un truc comme ça. Mais les explications du net sont pas évidentes :/

    Merci
    Règle N° 1 : Si tout va bien, ne touchez à rien.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Method "date" for object "Symfony\Component\Form\FormView" does not exist in FeriaNewsBundle:News:ajouter.html.twig at line 12
    il faut être cohérent: si tu enleve le , il faut également enlever
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ form_widget(form.date) }}
    laisse simplement le form_rest qui s'occupe d'afficher tout les champs qui n'ont pas été affiché, dont un champ jeton de sécurité .
    Consulte la source html et tu verras un input type hidden avec un name du type "form[token]".

    D'autres part tu n'affiches pas les erreurs en lien avec le formulaire (certaines erreurs sont liés à des champs du formulaire, d'autre au formulaire lui-même).
    ajoute un au début de ton formulaire, ça te permettra s'avoir une erreur du type "protection csrf invalide..." si tu as oublié le form_rest

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Hum en effet je passe pour un boulet

    C'était évident et j'ai pas fait gaffe que j'enlevais pas le form.date sur ma page .twig :/

    Ca fonctionne très bien comme ca !

    Merci bien !
    Règle N° 1 : Si tout va bien, ne touchez à rien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2010] Masquer Champs Formulaire
    Par papatte62360 dans le forum SharePoint
    Réponses: 4
    Dernier message: 16/10/2013, 16h35
  2. [SP-2007] Masquer champ formulaire en fonction de l'utilisateur
    Par antho130 dans le forum SharePoint
    Réponses: 0
    Dernier message: 18/05/2011, 08h54
  3. afficher/masquer champs formulaire
    Par groskanel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/05/2009, 14h23
  4. Masquer champs dans formulaire
    Par Michel Hubert dans le forum Access
    Réponses: 1
    Dernier message: 03/05/2006, 15h23
  5. masquer champ d'un formulaire
    Par ben127 dans le forum ASP
    Réponses: 9
    Dernier message: 21/02/2005, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo