Forms Yii2在ButtFattery的不同选项卡中有一个字段\Yii2 formwizard

Forms Yii2在ButtFattery的不同选项卡中有一个字段\Yii2 formwizard,forms,yii2,yii2-formwizard,Forms,Yii2,Yii2 Formwizard,现在我正在Yii2上开发复杂的测验应用程序。这是包含100多个问题的MCQ测试。我想将这些问题分为5个表单选项卡(以便在选项卡1中1到20个问题,在选项卡2中21到40个问题等)。有人能解释一下怎么做吗?因此,只有一个模型和一个表单提交 我考虑过使用这个工具。在文档中,我发现了跨越步骤的单一模型教程,但它并不真正适合我的情况,因为所有问题都写在一个字段中,而不是写在多行中 目前,答案模型如下: class Answers extends ActiveRecord { public funct

现在我正在Yii2上开发复杂的测验应用程序。这是包含100多个问题的MCQ测试。我想将这些问题分为5个表单选项卡(以便在选项卡1中1到20个问题,在选项卡2中21到40个问题等)。有人能解释一下怎么做吗?因此,只有一个模型和一个表单提交

我考虑过使用这个工具。在文档中,我发现了跨越步骤的单一模型教程,但它并不真正适合我的情况,因为所有问题都写在一个字段中,而不是写在多行中

目前,
答案
模型如下:

class Answers extends ActiveRecord
{
  public function rules(){
    return[
      [['id','question_id', 'option_id',  'user_id'], 'required'],
    ];
  }
}
索引视图:

//start form
<?php $form = ActiveForm::begin([
   'id' => 'my-form-id',
   'action' => ['answers/save'],
   'options' =>['class'=>['t-form']]
   ]); 
?> 
//foreach question:
  <?php for ($i=0; $i<count($questions); $i++): ?> 
    <div class="input-title">
      <?= Html::encode("{$questions[$i]->title}") ?>
    </div>

    <?php $options = Options::find()-> where 
      (['question_id'=>$questions[$i]->id]) ->all();
      $options = ArrayHelper::map($options,'id', 'title');?>
    //print options:
    <div class="radio__wrapper">  
      <?= $form->field($model, 'option_id')->radioList(
        $options, 
        ['name'=>'Questions['.$questions[$i]->id.']', 
         'separator' => '<br>',
         'required'=>true],)->label(false) ?>     
    </div>
   //submit form
    <?= Html::submitButton('Save', ['class' => 'submit']) ?>

<?php ActiveForm::end(); }
如果FormWizard不适合,请解释什么是最有效的方法?

为您提供了许多选项,可以使用
ActiveForm
模型创建表单向导

显著特征
  • 可以在所有步骤中使用单个模型
  • 每个步骤都有单独的模型
  • 将多个模型简化为一个步骤
  • 禁用/启用验证
  • 自定义订单字段(&O)
  • 带有“添加行”按钮的表格步骤可动态添加字段,如地址簿
  • 表单持久性(保存未保存的表单,以便稍后使用
    localstorage
    还原)
  • 预览步骤(预览所有带有标签的表单输入,作为最后一步,并在单击时导航到该步骤)
  • 多主题
演示 您可以查看包含所有可用变体的,对于文档,请使用

设置 使用composer安装扩展

php composer.phar/yii2 formwizard“@dev”

或者添加到require部分下的composer.json文件中

“ButtFattery/yii2 formwizard”:“@dev”

示例代码
它不仅支持,而且可以为每个步骤或步骤使用单独的模型too@MuhammadOmerAslam是的,你说得对。但是我不能使用单独的模型,因为所有答案都应该一次发布。我不明白你说的是什么。如果你担心一次发布所有答案,那么就不会有任何问题,因为向导会在最后一步之后,当你按下“完成”按钮时提交所有答案,而不是在最后一步之前提交。那么你想问什么呢?如果答案对你有帮助的话,一定要标出
public function actionSave(){        
  $request = \Yii::$app->request;
  foreach($request->post('Questions') as $key=>$value) {
    $model = new Answers();
    $model->load($request->post());
    $model->option_id = $value;
    $model->question_id = $key;
    $model->user_id = \Yii::$app->user->id;
    $model->save(false);
  }
  if( $model->save(false)){
    return $this->redirect(['result/index']);
  }
}
use buttflattery\formwizard\FormWizard;

$shootsModel = new Shoots();
$shootTagModel = new ShootTag();

echo FormWizard::widget([
    'steps'=>[
        [
            'model'=>$shootsModel,
            'title'=>'My Shoots',
            'description'=>'Add your shoots',
            'formInfoText'=>'Fill all fields'
        ],
        [
            'model'=> $shootTagModel,
            'title'=>'My Shoots',
            'description'=>'Add your shoots',
            'formInfoText'=>'Fill all fields'
        ],
    ]
]);