इस तक पहुंचने के कुछ तरीके हैं। मैं तुम्हें Yii मंच में तैनात देख तो मैं तुम वहाँ के आसपास भी खोज की है मान लेते हैं लेकिन मामले में आप नहीं है:
मैंने क्या किया है (बस एक साधारण 2-चरणीय ActiveRecord फ़ॉर्म के लिए) एक ही कार्रवाई की और इसे बटन नाम के आधार पर सशर्त ब्लॉक में विभाजित किया गया, जो एक फॉर्म पर Yii POSTs सबमिट करता है (नोट: AJAX सबमिट के साथ काम नहीं करता है)। फिर, किस बटन पर हिट किया गया था, इस पर निर्भर करता हूं कि मैं सही फॉर्म प्रस्तुत करता हूं और सत्यापन उद्देश्यों के लिए अपने मॉडल पर सही परिदृश्य सेट करता हूं।
आपके जैसे छुपा "चरण" फ़ील्ड सबमिट बटन की जांच के समान उद्देश्य प्रदान कर सकता है। हालांकि मैं शायद एक छिपे हुए क्षेत्र को जोड़ने के बजाय "चरण" को फॉर्म स्थिति में सहेज दूंगा, लेकिन यह ठीक होगा।
कुछ लोग विज़ार्ड में एक ही चरण से डेटा को सहेजने के लिए राज्य सक्रिय सक्रिय फर्म विशेषता का उपयोग करते हैं, या आप सत्र का उपयोग कर सकते हैं, या यहां तक कि एक temp डेटाबेस तालिका में भी सहेज सकते हैं। नीचे मेरे पूरी तरह से अवांछित उदाहरण में मैं एक स्टेटफुलर फॉर्म कार्यक्षमता का उपयोग कर रहा हूं।
यहां एक उदाहरण है जो मैंने मूल रूप से ActiveRecord फ़ॉर्म के लिए किया था।
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(); ?>
फार्म 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));
} ?>
रूपों कुछ इस तरह दिखेगा: यह "actionCreate" में चला जाता है
<?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(); ?>
मुझे आशा है कि है उपयोगी!
'CHTML पर एक नजर डालें :: statefulForm' और एक [Yii मंच पर धागा] (http://www.yiiframework.com/forum/index.php?/topic/ 8413-जादूगर-रूप /) –