Es gibt ein paar Möglichkeiten, dies zu erreichen. Ich sehe dich im Yü Forum gepostet, damit ich nehme an, Sie um auch dort gesucht haben, aber falls Sie nicht:
Was ich getan habe, ist (nur für ein einfaches 2-stufiges ActiveRecord-Formular) eine einzelne Aktion ausgeführt und diese in Bedingungsblöcke aufgeteilt, basierend auf dem Button-Namen, den Yii POSTs auf einem Formular abschicken (Anmerkung: funktioniert nicht mit Ajax-Submits). Dann, je nachdem, welche Taste gedrückt wurde, rendere ich das korrekte Formular und setze das richtige Szenario für Validierungszwecke auf mein Modell.
Ein verstecktes "Schritt" -Feld, wie Sie es haben könnten, könnte dem gleichen Zweck dienen wie der submitButton-Name. Ich würde vielleicht den "Schritt" in den Formularzustand speichern, anstatt ein verstecktes Feld hinzuzufügen, aber beides wäre in Ordnung.
Einige Personen verwenden das stateful activeForm-Attribut, um die Daten eines einzelnen Schritts im Assistenten zu speichern, oder Sie können die Sitzung verwenden oder sogar in einer temporären Datenbanktabelle speichern. In meinem unten völlig ungeprüften Beispiel verwende ich eine Stateful-Form-Funktionalität.
Hier ist ein Beispiel, was ich im Grunde für ein ActiveRecord-Formular getan habe. Dies geht in der "actionCreate":
Form1:
<?php $form=$this->beginWidget('CActiveForm', array(
'enableAjaxValidation'=>false,
'id'=>'model-form',
'stateful'=>true,
));
<!-- form1 fields go here -->
echo CHtml::submitButton("Cancel",array('name'=>'cancel');
echo CHtml::submitButton("On to Step 2 >",array('name'=>'step2');
$this->endWidget(); ?>
Form 2:
<?php if (isset($_POST['cancel'])) {
$this->redirect(array('home'));
} elseif (isset($_POST['step2'])) {
$this->setPageState('step1',$_POST['Model']); // save step1 into form state
$model=new Model('step1');
$model->attributes = $_POST['Model'];
if($model->validate())
$this->render('form2',array('model'=>$model));
else {
$this->render('form1',array('model'=>$model));
}
} elseif (isset($_POST['finish'])) {
$model=new Model('finish');
$model->attributes = $this->getPageState('step1',array()); //get the info from step 1
$model->attributes = $_POST['Model']; // then the info from step2
if ($model->save())
$this->redirect(array('home'));
else {
$this->render('form2',array('model'=>$model));
} else { // this is the default, first time (step1)
$model=new Model('new');
$this->render('form1',array('model'=>$model));
} ?>
Die Formen wie folgt aussehen würde
<?php $form=$this->beginWidget('CActiveForm', array(
'enableAjaxValidation'=>false,
'id'=>'model-form',
'stateful'=>true,
));
<!-- form2 fields go here -->
echo CHtml::submitButton("Back to Step 1",array('name'=>'step1');
echo CHtml::submitButton("Finish",array('name'=>'finish');
$this->endWidget(); ?>
hoffe ich, dass ist hilfreich!
Werfen Sie einen Blick auf 'CHtml :: statefulForm' und ein [Thema bei Yü Forum] (http://www.yiiframework.com/forum/index.php?/topic/ 8413-wizard-forms /) –