Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2使用Yii2 formwizard保存表格数据_Php_Yii2_Yii2 Advanced App_Yii2 Formwizard - Fatal编程技术网

Php Yii2使用Yii2 formwizard保存表格数据

Php Yii2使用Yii2 formwizard保存表格数据,php,yii2,yii2-advanced-app,yii2-formwizard,Php,Yii2,Yii2 Advanced App,Yii2 Formwizard,我正在集成表格输入,但无法将数据提交到控制器操作并使用Model::loadMultiple 我必须将我的模型声明为数组,然后在传递到视图之前需要对其进行初始化。在buttflattery/yii2 formwizard前端,我必须将我的模型指定为数组,但我无法从控制器动态检索数据 我需要从前端动态创建实例,并将它们保存在后端。 我只能保存已从控制器初始化的实例。如果我不只初始化已保存的前一个实例。而且,当我使用for循环初始化多个实例时,前端会立即复制所有实例,我也不需要这样做 //控制器

我正在集成表格输入,但无法将数据提交到控制器操作并使用
Model::loadMultiple

我必须将我的模型声明为数组,然后在传递到视图之前需要对其进行初始化。在
buttflattery/yii2 formwizard
前端,我必须将我的模型指定为数组,但我无法从控制器动态检索数据

我需要从前端动态创建实例,并将它们保存在后端。 我只能保存已从控制器初始化的实例。如果我不只初始化已保存的前一个实例。而且,当我使用for循环初始化多个实例时,前端会立即复制所有实例,我也不需要这样做

//控制器
公共函数actionCreatemulti()
{
$this->layout='layout2';
$education=[neweducsubject()];
//##初始化2个元素的数组(如果我没有只初始化一个对象传递或保存)
对于($i=0;$i<2;$i++){
$education[]=新教育科目();
}
//##Model::loadMultiple-->仅当$education声明为数组时才起作用
if(Model::loadMultiple($education,Yii::$app->request->post())和&Model::validateMultiple($education)){
foreach(教育为$edu){
$edu->save(false);
}
返回$this->render('dummy');
}
返回$this->render('createmulti'[
“教育”=>$教育,
]);
}           
我的视图中的FormWizard代码

    <?php

    echo FormWizard::widget(
        [
            'formOptions' => [
                'id' => 'my_form_tabular'
            ],
            'steps' => [
                [
                //should be a single model or array of Activerecord model objects but for a single model only see wiki on github
                    'model' => $education, //## here I canot declared array again as I pass an array alredy from controller

                //set step type to tabular
                    'type' => FormWizard::STEP_TYPE_TABULAR,

我开发了这个小部件,但在此之前,我建议您阅读有关表格输入的基本实现的任何内容,尽管该指南并非完全有用,但仍有一些部分仍在
TBD
中,用于在表格中插入/创建表格数据的代码示例尚未添加有很多细节,但最好研究源代码方法,毕竟我们是工程师,应该能够理解任何函数的实现,无论是框架核心的一部分还是单独文件的一部分

解决问题 现在,关于这个问题,您没有理由使用在操作顶部添加的for循环

 for ($i=0; $i < 2 ; $i++) { 
     $education[]= new Edusubject();
 }
在您的视图中,
FormWizard
中的
model
属性如下所示

'model' => $education,

我刚刚在localhost上测试了它,它可以正确加载、验证和保存。

我希望您没有收到我的问题。我已经按照你在这里解释的那样使用了。但是我只能保存(捕获)表单模型的第一个元素。(总是保存一个元素,不管表单中有多少个元素。)@noc_kockout啊,对不起,我刚刚明白你的意思,我忽略了它,我已经更新了答案,请查看最新的代码。它应该保存表单中提交的所有模型now@noc_kockout很高兴听到它现在适用于您,请单击绿色标记将答案标记为已接受/正确,这样其他有相同问题的人也可以从解决方案中受益
public function actionCreatemulti()
    {
        $this->layout='layout2';

        $education = [new Edusubject()];

        //cehck if post request
        if(Yii::$app->request->isPost){
            //get total models submitted
            $count = count(Yii::$app->request->post('Edusubject',[]));

            //start the loop from 1 rather than 0 and use the $count for limit
            for ($i=1; $i < $count ; $i++) { 
               $education[]= new Edusubject();
            }

            if (
                 Model::loadMultiple($education, Yii::$app->request->post()) 
                 && Model::validateMultiple($education)
            ) {
                foreach ($education as $edu) {
                    $edu->save(false);
                }
                return $this->render('dummy');
            }
        }

        return $this->render('createmulti', [
            'education' => $education,    
        ]);
}
'model' => $education,