it-swarm-fr.com

Comment définir plusieurs messages d'erreur avec form_set_error?

Je remarque que je peux transmettre une variable de message à form_set_error().

Comment puis-je transmettre plusieurs messages?

J'ai essayé d'appeler form_set_error () plusieurs fois, mais toujours le premier est affiché.

Donc, pour résumer, je veux montrer quelque chose comme ceci:

  • erreur 1
  • erreur 2
  • erreur 3

Actuellement, je ne peux obtenir que:

  • erreur 1

Ensuite, une fois que les utilisateurs le corrigent et le soumettent à nouveau, ils obtiennent:

  • erreur 2

    if (strpos ($ form_state ["values"] ["body"], "

    if (strpos ($ form_state ["values"] ["body"], "

Si ces deux instructions de contrôle déclenchent une erreur, seule la première est affichée. Une fois que l'utilisateur a corrigé l'erreur, le deuxième message d'erreur s'affiche.

6
giorgio79

Je changerais le code pour émettre un seul appel à form_set_error() par élément:

$errors = array();
if (strpos($form_state["values"]["body"], "<h1") === true)
    $error_messages["body"][] = "Blalalabalbal bablalbabla.";

if (strpos($form_state["values"]["body"], "<h3") === false)
    $error_messages["body"][] = "Do this do that balbablalba.";

foreach ($error_messages as $element => $messages) {
    form_set_error($element, theme('item_list', array('items' => messages)));
}
10
janusman

J'ai créé une fonction distincte pour cela:

function form_set_error_multiple($name = NULL, $messages = '', $limit_validation_errors = NULL) {
  return form_set_error('extra][items', implode('</li><li>', $messages));
}

Et puis je peux l'appeler comme ça:

$errors = array();
$errors[] = 'My element error';
$errors[] = 'Another error for the same element';

if ($errors) {
  form_set_error_multiple('my_element', $errors);
}
2
Rafal Enden

Transmettez-vous le nom de l'élément d'entrée à form_set_error()?

Selon le nom de la fonction, vous pouvez transmettre un message par appel de fonction.

1
Codium

J'ai résolu cela avec un "hack":

$error_messages = "";
if (strpos($form_state["values"]["body"], "<h1") === true)
   $error_messages .= "Error Message on First Line <br/>";
}
if (strpos($form_state["values"]["body"], "<h3") === false){
   $error_messages .= "Error Message on Another Line <br/>";
}
// next check if there are any errors, and if so, write them to form_set_error
if(strlen($error_messages) > 0){
  form_set_error('',$error_messages);
}

Cela affichera toutes les erreurs accumulées sous la forme d'un message Drupal.

0
mparker1113