redirect dopo validazione fallita come ?

Salve ho un form registrazione cliente, con il campo “codice fiscale” unico, se viene inserito un duplicato la validazione fallisce, vorrei redirezionare l’utente sulla pagina del cliente (già esistente) dopo la validazione fallita, qualche suggerimento ? :)

grazie

Dunque io faccio così:

all’onchange dei campo “ragione sociale” e “codice fiscale” lancio una ricerca tra le anagrafiche. se è già presente lo stesso codice fiscale mi si presenta una confirm-box che mostra l’errore di duplicazione e chiede se si vuole caricare l’anagrafica esistente.

nel caso faccio quindi un redirect alla pagina update del cliente in questione.

buon lavoro!

ciao emafer grazie per il suggerimento, speravo in un metodo lato server piuttosto che in un javascript(client), in questo caso potrò fare a meno anche della regola "unique" sulla propretà codice_fiscale del modello !

In tal caso esegui un model->validate prima del model->save e se c’è l’errore sul campo codice fiscale a causa doppio allora fai un redirect all’update dell’anagrafica, con il codice fiscale come campo di ricerca, altrimenti model->save().

Questa mi piace di più :) ma sul ->validate come filtro il tipo di ‘errore’ ? Come riconosco se si tratta del codice_fiscale o non ?

grazie ;)

Potresti provare a fare un $model->validate(array(‘codicefiscale’)), e quindi validi solo il campo scelto.

Poi fai un $model->getError(‘codicefiscale’). E questo ti da il primo errore di validazione sul campo. Nel caso della duplicazione dovresti averne solo uno, essendo il codice fiscale corretto.

Fatto questo se il messaggio è quello che hai preparato per la duplicazione fai un redirect.

[OT]

Tuttavia, e mi faccio un po’ degli affari tuoi, credo che un caricamento forzato dell’anagrafica senza messaggi possa spiazzare l’utilizzatore: io ho preferito il lato client perché potrebbe esserci un caso di errore di battitura che mi causa l’uguaglianza e quindi apro la finestra di cui sopra, altrimenti tu inserisci il cliente pincopalla e ti ritrovi a modificare poi il cliente pallapinco.

Oltretutto, facendo un controllo per l’uguaglianza su ragione sociale e cf all’inserimento sai che stai inserendo un cliente già inserito mentr lo fai e non dopo aver caricato dati, contatti etc etc e cliccato inserisci.

Credo che si possa utilizzare la validazione ajax di default usando il widget del form, ma non usando il widget non ti saprei dire.

[/OT]

Se guardi qui viene una cosa interessante:

tra le regole della validazione inserisci


array('codicefiscale', 'unico')

dove unico è una funzione all’interno del model tipo quella che segue




public function unico($attribute,$params)

    {       

//controllo se il codice è unico

$esisto=CLIENTE::model()->findBy('codicefiscale=blabla');

//se esiste il cliente faccio il redirect

if ($esisto) redirect_to_/cliente/update&id=$esisto->id.

    }



ciao emafer grazie per il reply, una domanda extra, inerente al redirect di yii … invece di spostare l’utente senza fargli capire per quale motivo lo redirecto su un altra pagina, è possibile mostrare un countdown di 5sec… che spiega “Utente esistente ti stò dirottando sulla sua pagina personale …” ?

grazie ;)

posto il codice potrebbe tornare utile a qlcuno ! ;D (questa func và scritta nel Model)




public function unico($attribute,$params)

        {       

            //controllo se il codice è unico

            $codiceFiscaleInserito= trim($this->$attribute);

            

            $criteria = new CDbCriteria;  

            $criteria->addCondition('cf = "'.$codiceFiscaleInserito.'"');


            if(isset(Paziente::model()->find($criteria)->id ))

            {

                $pazienteEsistente = Paziente::model()->find($criteria)->id;

                //se esiste il cliente faccio il redirect

                if ($pazienteEsistente !== null) 

                    Yii::app()

                    ->getController()

                    ->redirect(

                            array('paziente/view&id='.$pazienteEsistente)

                                );

            }

         }