[YII2] Creare e Salvare istanze multiple dello stesso model

Vorrei caricare in una view lo stesso campo di input del model, più volte (anche dinamicamente). Ciò che in php è:




<input type="text" name="name[]" />

<input type="text" name="email[]" />


<input type="text" name="name[]" />

<input type="text" name="email[]" />


<input type="text" name="name[]" />

<input type="text" name="email[]" />



Come devo instanziare il model nel Controller ? Ho letto sulla documentazione di Model::loadMultiple, ma non ho capito come funziona.

Cosa non ti torna?

Non ho provato ma leggendo la documentazione vedo:




boolean loadMultiple( $models, $data, $formName = null )



Se hai N modelli da salvare ti crei un array $items con N modelli vuoti, poi usi una cosa tipo questa




...


if (Model::loadMultiple($items, Yii::$app->request->post()) && Model::validateMultiple($items)) {


        $count = 0;

        foreach ($items as $item) {

           // populate and save records for each model

            if ($item->save()) {

                // do something here after saving

                $count++;

            }

        }

        Yii::$app->session->setFlash('success', "Processed {$count} records successfully.");

        return $this->redirect(['index']); // redirect to your next desired page

    } else {

        return $this->render('update', [

            'items' => $items,   

        ]);

    }



esempio preso dal wiki

@Nicola

Non riesco a creare un esempio completo.

Nel controller metto:




$count = count(Yii::$app->request->post('competenze', []));

        $competenze = [new CrCompetenza()];

        for($i = 1; $i < $count; $i++) {

            $competenze[$i] = new CrCompetenza();

        }


            if ( Model::loadMultiple($competenze, Yii::$app->request->post()) && Model::validateMultiple($competenze) ) {

                foreach ($competenze as $competenza) {

                    // populate and save records for each model

                    if ($competenza->save(false)) {

                        // do something here after saving

                        $count++;

                    }

                }




                return $this->redirect(['curriculum/altreinfo']);

            }



Nella view:




foreach ($competenze as $index => $competenza) {

                            echo $form->field($competenza, "[$index]livello")->label('');

                        }



Se utilizzo, invece, l’esempio del link al wiki che mi hai fornito mi da questo errore:




Setting formName for Model::loadMultiple



Non ne sto venendo a capo… :(

Rispondo dopo un po, dicendo che basta seguire questa guida

Che è praticamente la stessa cosa che ti ho scritto ;)