Hi, I am using Yii2 basic and also using dynamic form widget. The scenario is One Pastor has many Short term goals and each short term goals can have Missional and Spiritual Personal goals. So I am using the nested dynamic form. Here I have implemented actionCreate() which is functioning well. But in actionUpdate() It gives me error as below
# Invalid Configuration – [yii\base\InvalidConfigException](http://www.yiiframework.com/doc-2.0/yii-base-invalidconfigexception.html)
## The 'model' property must be set and must extend from '\yii\base\Model'.
Following is my actionUpdate() code.
public function actionUpdate($id)
{
$model = $this->findModel($id);
$modelsShortTerm=$model->shorttermgoals;
$modelsShortTermMissional = [];
$oldShortTermMissional = [];
if (!empty($modelsShortTerm)) {
foreach ($modelsShortTerm as $indexShortTerm => $modelShortTerm) {
$missional = $modelShortTerm->shorttermmissionalgoals;
$modelsShortTerm[$indexShortTerm] = $missional;
$oldShortTermMissional = ArrayHelper::merge(ArrayHelper::index($missional, 'ShortTermMissionalGoalId'), $oldShortTermMissional);
}
}
if ($model->load(Yii::$app->request->post())) {
$modelsShortTermMissional = [];
$oldIDs = ArrayHelper::map($modelsShortTerm, 'ShortTermGoalsId', 'ShortTermGoalsId');
$modelsShortTerm = Modelshortterm::createMultiple(Shorttermgoals::classname(), $modelsShortTerm);
Modelshortterm::loadMultiple($modelsShortTerm, Yii::$app->request->post());
$deletedIDs = array_diff($oldIDs, array_filter(ArrayHelper::map($modelsShortTerm, 'ShortTermGoalsId', 'ShortTermGoalsId')));
$valid = $model->validate();
$valid = Modelshortterm::validateMultiple($modelsShortTerm) && $valid;
$missionalId = [];
if (isset($_POST['Shorttermmissionalgoals'][0][0])) {
foreach ($_POST['Shorttermmissionalgoals'] as $indexShortTerm => $missional) {
$missionalId = ArrayHelper::merge($missionalId, array_filter(ArrayHelper::getColumn($missional, 'ShortTermMissionalGoalId')));
foreach ($missional as $indexMissional => $missional1) {
$data['Shorttermmissionalgoals'] = $missional1;
$modelShortTermMissional = (isset($missional1['ShortTermMissionalGoalId']) && isset($oldShortTermMissional[$missional1['ShortTermMissionalGoalId']])) ? $oldShortTermMissional[$missional1['ShortTermMissionalGoalId']] : new Shorttermmissionalgoals;
$modelShortTermMissional->load($data);
$modelsShortTermMissional[$indexShortTerm][$indexMissional] = $modelShortTermMissional;
$valid = $modelShortTermMissional->validate();
}
}
}
$oldMissionalId = ArrayHelper::getColumn($oldShortTermMissional, 'ShortTermMissionalGoalId');
$deletedMissionalId = array_diff($oldMissionalId, $missionalId);
if ($valid) {
$transaction = \Yii::$app->db->beginTransaction();
try {
if ($flag = $model->save(false)) {
if (! empty($deletedMissionalId)) {
Shorttermmissionalgoals::deleteAll(['ShortTermMissionalGoalId' => $deletedMissionalId]);
}
if (!empty($deletedIDs)) {
Modelshortterm::deleteAll(['ShortTermGoalsId' => $deletedIDs]);
}
foreach ($modelsShortTerm as $indexShortTerm => $modelShortTerm) {
if ($flag === false) {
break;
}
$modelShortTerm->PastorId = $model->PastorId;
if (!($flag = $modelShortTerm->save(false))) {
break;
}
if (isset($modelsShortTermMissional[$indexShortTerm]) && is_array($modelsShortTermMissional[$indexShortTerm])) {
foreach ($modelsShortTermMissional[$indexShortTerm] as $indexMissional => $modelShortTermMissional) {
$modelShortTermMissional->ShortTermGoalsId = $modelShortTerm->ShortTermGoalsId;
if (!($flag = $modelShortTermMissional->save(false))) {
break;
}
}
}
}
}
if ($flag) {
$transaction->commit();
return $this->redirect(['view', 'id' => $model->PastorId]);
}
} catch (Exception $e) {
$transaction->rollBack();
}
}
//return $this->redirect(['view', 'id' => $model->GroupId]);
}else {
return $this->render('update', [
'model' => $model,
'modelsShortTerm' => (empty($modelsShortTerm)) ? [new Shorttermgoals] : $modelsShortTerm,
'modelsShortTermMissional' => (empty($modelsShortTermMissional)) ? [[new Shorttermmissionalgoals]] : $modelsShortTermMissional,
]);
}
}
What should I do?