[Yii 1] Creare Un Form Multi Step

Salve, avrei bisogno di delucidazioni per creare un form multi step.

Posso gestirlo cosi?:

Controller:

public function actionCreate()

{


	$model=new Articolo;


	if(isset($_POST['step1']))


    {


            $attributes = array('nome', 'descrizione', 'codice');

}

if(isset($_POST[‘step2’]))

    {


            $attributes = array('prezzo', 'diritti');

}

if(isset($_POST[‘step2’]))

    {


            $attributes = array('quantita', 'provenienza');

Suppongo che in questo punto vada inserito/a Validazione, Inserimento dati nel database di tutti gli steps e render della vista

}

Come valido i vari step? Come salvo lo step per non perdere i dati durante gli step successivi? Devo creare una vista per ogni singolo step? Devo creare un form per ogni singolo step? Qualcuno può illuminarmi anche con un link da leggere?

Puoi gestire il salvataggio su DB oppure sulla sessione, se non è necessario

ad esempio ripartire da dove si era rimasti nel caso in cui ci siano problemi

con il browser (venga erroneamente chiuso).

La procedura che ho scritto è corretta quindi? Sotto a ogni step come faccio a validare e salvare. Ecco appunto…il problema del browser mi interessa. Ma come ho scritto sopra, (non ho trovato nulla sul web)non ho capito come validare, salvare lo step, e renderizare la vista a ogni step. Mi basterebbe un link perchè sta sclerando anche google poverino a forza di porgli domande ;D

Per validare il form basta che lanci il metodo validate() del FormModel che stai usando (ti conviene usare un FormModel così puoi modellare tutti gli attributi che ti servono);




$form->validate();



Questo è ciò che sto cercando di implementare (nell’ action create del controller) leggendo qua e la per capire come realizzarlo. Pero mi da errore di sintassi nell editor php (uso Dreamweaver), all’ ultimo else e alla chiusura prima dell’ utlima parentesi }

Yii ti innamora…non posso negarlo…ma ti logora ;D è un bel mix insomma ;D

Ma vabbè i capelli bianchi arriveranno cmq ;D si inziano a vedere. Forse è il caso che vada nella mia culla a riposare ;D la notte porta consiglio…dicono!!!

if (isset($_POST[‘cancel’]))

{

$this->redirect(array(‘home’));

}

elseif (isset($_POST[‘step2’]))

{

$this->setPageState(‘step1’,$_POST[‘Telegramma’]);

$model=new Telegramma(‘step1’);

$model->attributes = $_POST[‘Telegramma’];

if($model->validate())

$this->render('form2',array('model'=>$model,));

else

{

$this->render('form1',array('model'=>$model,));

}

}

elseif (isset($_POST[‘finish’])) {

$model=new Telegramma(‘finish’);

$model->attributes = $this->getPageState(‘step1’,array());

$model->attributes = $_POST[‘Telegramma’];

if ($model->save())

$this->redirect(array('home'));

else

{

$this->render('form2',array('model'=>$model,));

}

else ->>>>>>>>> ERRORE

{

$model=new Telegramma(‘new’);

$this->render(‘form1’,array(‘model’=>$model,));

));->>>>>>>> ERRORE

}

Il form è basato su un Model, giusto?

Bene, crea delle specifiche regole di validazione dividendole in scenari, dove ciascuno scenario è uno specifico step.

A quel punto, quando fai il loadModel, gli assegni lo scenario dello step, gli attributi dello step, e il validate fa tutto da solo.

Per il salvataggio: cerca informazioni sulle Statefull forms, oppure usa i cookie, ma sono pesantemente contrario, oppure, come suggerito, usa il db.

Tieni conto che devi prevedere che il browser sia chiuso a ‘metà’ procedura… quindi o prevedi il ripristino dello stato alla riapertura della pagina, o semplicemente lo scarti.

Altra strada, forse più complicata, è usare dell’html che ti crea delle schede e gestire l’avanti <-> indietro tra le pagine via javascript, quindi fai la validazione in un unico colpo.