ho tre campi, opzionali, ma ALMENO UNO dei tre deve essere inserito.
Ho creato un vaildatore custom che, se nessuno dei tre è compilato, esegue l’addError SOLO SUL PRIMO dei tre campi.
Solo che, giustamente, questo validatore viene eseguito 3 volte.
Il risultato è che in cima alla form di inserimento ho 3 volte la notifica dello stesso errore… C’è modo di dirgli aggiungi questo errore se non c’è già ? O qualcosa del genere ?
Cerco di rispiegarmi: io ho 3 campi la cui validazione è: OK se almeno uno dei tre è compilato.
Cio vuol dire che l’utente deve sempre compilare almeno uno dei tre, ma a sua scelta, quindi non ho afferrato l’utilizzo che mi consigli di fare della checkbox.
Potrei semplicemente eseguire la validazione su un campo solo (tenendo conto però di tutte e tre), ma poi in futuro me ne pentirò di sicuro, quindi voglio evitarlo
Se tu mandi il form senza selezionare alcun check, avrai che selezione_check = NULL. Se lo metti nella lista dei required (in rules()),
otterrai un solo messaggio di errore.
Se ne viene selezionato uno, la validazione passa.
Se ne viene selezionato più di uno, per memorizzarlo hai 2 opzioni: puoi memorizzare il campo in un campo di tipo SET su MySQL (mettendo nel valore magari un testo piuttosto che un numero), oppure se il valore è un numero usare le potenze del 2, come somma dei valori selezionati, ciascuno preso come potenza di 2.
Esempio, in questo secondo caso, se sono selezionati il primo ed il terzo, avrai che il campo che conterrà il valore sarà: 1^2 + 3^2 = 1 + 9 = 10
Poi quando devi sapere se un check è utilizzato o meno, basta fare = <valore_campo> AND <valore_da_controllare>^2.
L’approccio con il campo SET forse è più semplice nel tuo caso (soprattutto se il check riguarda testi.
scusate ma ancora una volta non mi devo essere spiegato bene …
la validazione è fatta e funziona , e i tre campi devono rimane separati, perchè tra l’altro vengono rice&trasmessi da un altra applicazione
Posto questo, se c’è un errore in uno dei tre campi, l’addError viene eseguito tre volte (sempre sul primo dei tre), e quindi vedo un ‘hint’ di tipo errore una sola volta, ma in cima al form, dove c’è l’elenco degli errori, viene riportato tre volte.
Vi chiedevo solo come evitare sta cosa, e comunque grazie per l’approccio a campo singolo, anche se insolitamente complesso per un problema così banale.
Se imposti una variabile $_errorepresente nel tuo model,
la funzione di validazione potrebbe controllare se è già settata, nel qual caso non verrebbe eseguita. Altrimenti controlla, valida o meno e setta a 1 la variabile, restituendo l’errore…