Есть несколько подходов к этому. Я вижу, что вы разместили сообщение на форуме Yii, поэтому я предполагаю, что вы тоже искали там, но на случай, если вы этого не сделали:
Что я сделал, так это (только для простой двухэтапной формы ActiveRecord) предпринял одно действие и разделил его на условные блоки на основе имени кнопки, которые Yii POSTs при отправке формы (примечание: не работает с ajax submits ). Затем, в зависимости от того, какая кнопка была нажата, я визуализирую правильную форму и устанавливаю правильный сценарий в своей модели для целей проверки.
Скрытое поле «шаг», как у вас, может служить той же цели, что и проверка имени submitButton. Я бы, возможно, сохранил «шаг» в состоянии формы вместо добавления скрытого поля, но и то, и другое было бы хорошо.
Некоторые люди используют атрибут activeForm с отслеживанием состояния для сохранения данных из одного шага в мастере, или вы можете использовать сеанс или даже сохранить во временную таблицу базы данных. В моем полностью непроверенном примере ниже я использую функциональность формы с отслеживанием состояния.
Вот пример того, что я в основном сделал для формы ActiveRecord. Это происходит в «actionCreate»:
<?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));
} ?>
Формы будут выглядеть примерно так:
Форма1:
<?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(); ?>
Форма 2:
<?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(); ?>
Я надеюсь, что это полезно!
person
thaddeusmt
schedule
23.08.2010
CHtml::statefulForm
и тему на форуме Yii< /а> - person Grey Teardrop   schedule 24.08.2010