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,