Modifs faite dans _validate ignorées si la validation passe pas

Bonjour,

Dans une fonction _validate, je modifie $form et $form_state et c’est pris en compte quand tout va bien.

Si la validation plante (ex pas de titre), ma fonction est bien exécutée mais visiblement sur des clones de $form et $form_state, car mes modifs sont ensuite ignorées par drupal_render_form :-/

C’est normal docteur ?

(apparemment, _form_validate envoie une copie de $form qui n’est pas récupérée ensuite, mais pour form_state les modifs devraient être prises en compte non ?)

#

Je sais que tant que le formulaire n’est pas valider rien ne se passe ton form n est pas submiter du tout.Au pire debug dans form validate tu verra direct

MOMO Drupal en force

#

C’est bien mon pb, tout ce que je fait dans le _validate n’est pas pris en compte au drupal_render_form (et donc des cases cochées se «décochent»).

#

pour moi un forme en dupal tu le créee dans la fonction _form(&$form_state, $id = NULL) ou tu return un $form

Riena qu avec ca ton form apparait ensuit le _form_validate c’est pour faire des verif à savoir sur les champ et renvoyer des message d’erreur si tu le desire.

Ensuit dans le _form_submit($form, &$form_state) tu recupere tes donnees modifier via le formulaire dans le tableau $form_state et tu fait ton traitement si c’est des check box ke tu a coche tu aura true ou 1 je sai plus dans la case du tableau de formstae correspondand.

Tu vois ce que je veut dire.C’est quoi ki marche pas dans le tiens ??

MOMO Drupal en force

#

Alors, pour la création et le submit de mon form, aucun pb, pour le display non plus SAUF si le validate plante (pas de titre), auquel cas le form qui est affiché est celui qui était en cache sans les valeurs courantes que l’utilisateur vient d’entrer pour mes elements custom.

Dans ce cas, je passe bien dans mon _validate perso, mais les modifs que j’y fait ne sont pas répercutées dans drupal_render. C’est apparemment normal pour $form (c’est une copie qui n’est la que pour consultation, cf drupal_validate_form dans form.inc), mais les modifs de form_state[‘values’] sont ignorées aussi (et c’est là que je pige pas pourquoi).

#

ca me parrait bizarre j avai jamai fait attention a ca.Stock les toi meme dans une variable ke tu met en global.Meme si je l avoue c’est pas tres propre.J’avai pas bien compris au debut dsl

MOMO Drupal en force

#

Je vois pas trop comment mettre qqchose en global modifierait le comportement de drupal_render ?

Je crois avoir trouvé une soluce (pour être sûr j’ai pas mal de refactoring de code et de nettoyage (pour virer tous mes tests, les validates qui servent plus, tout tester dans chaque cas de figure, etc.).

Le problème :

  • un form avec des elements custom, éléments éventuellement modifiés en ajax (qui fait du get_cache/modif/form_builder/set_cache)
  • lors du post, si la validation passe pas, les valeurs du $_POST concernant mes éléments custom sont perdues (à priori normal car arbo différente dans $form et $form_state, parce que je force du $form_state[‘values’][‘taxonomy’] via le name des éléments alors que ces elements ne sont pas dans $form[‘taxonomy’], pour avoir une gestion conditionnelle en ajax des vocab affectés aux nodes sans devoir refaire le taf du module taxonomy), et je n’arrivais pas à les remettre avec mon code parce que mon after_build n’était plus appelé et que les modifs faites dans mon _validate étaient ignorées lors du render.

la solution consisterait à mettre dans le code appelé en ajax, après le form_builder mais avant le set_cache un unset($form[‘mes_trucs_perso’][‘#after_build_done’]) ;

Ça règle mon pb car je peux modifier mes #value dans mon _after_build.

Sinon, pour recap les modifs de $form_state dans le _validate (sert à rien de modifier $form qui n’est pas récupéré) peuvent servir dans le _submit mais ne changent rien au rendu (qui prend $form et ignore $form_state), il faudrait utiliser un form_set_value dans le _validate.

#

en fait moi je croyai ke ton pb c’etait ke kan la validation echou tu perdais tes donner dans tes champ et la je parle ke des valu de tes champ en gros je croyai ke ca te vider ton formulaire

MOMO Drupal en force

#

Oui, c’était bien ça le pb, mais juste pour mes elements perso.

#

ta mis des default value dans chacun de tes champ de form ??

Sinon regarde ce ke lui il dit
http://drupalfr.org/forum/support/developpement/8985-afficher-les-valeur…

MOMO Drupal en force

Syndiquer le contenu