Jak obsłużcyc formularze

Witam forumowiczów,

Mam problem, nie łapię czegoś, bardzo proszę o pomoc.

Mam 3 modele, chcę aby we formularzu na widoku, móc dodać do nich dane (po jednym rekordzie do każdego z modeli (ActiveRecord).

Jak się domyślam muszę utworzyć 3 formularze, czy jakoś inaczej, np. jeden. Co potem? Jak rozumiem dane idą do kontrolera, czyli gdzie konkretnie?

Jak obsłużyć dane z formularza i ostatecznie zapisać je w modelach-tabelach typu ActiveRecord?

Co się dzieje po kliknięciu w przycisk – dane przesyłane są z requestu do akcji w kontrolerze?

Jak zapisać konkretny formularz, czy da się zapisać wszystkie jakimś krótszym kodem?

Aha, oczywiście używam ActiveForm.

Pozdrawiam

Przeczytaj sobie wszystko tu jeszcze raz http://www.yiiframework.com/doc-2.0/guide-README.html#getting-data-from-users i jak coś będzie niejasne to pytaj.

Witam,

Trochę się zagłębiłem w temacie, ale dalej mam problem i nie łapie jednej rzeczy.

Chyba łatwiej będzie to przekazać kodem. Co jest nie tak, że linijka

$loaded = ActiveRecord::loadMultiple($models, Yii::$app->request->post());

pozostaje false? Jak to wszystko zrealizować. Oto kod.

Kontroler


<?php


namespace app\controllers;


use yii;


use yii\web\Controller;


use yii\db\ActiveRecord;

use app\models\Opiekun;

use app\models\Zwierze;

use app\models\Pobyt;


class RezerwujController extends Controller {

  

	public function actionIndex()

    {


    	$modelOpiekun = new Opiekun(); 

    	$modelZwierze = new Zwierze();

    	$modelPobyt = new Pobyt();


        $models = [ $modelOpiekun, $modelZwierze, $modelPobyt ];


        $loaded = 'false';

    	$loaded = ActiveRecord::loadMultiple($models, Yii::$app->request->post());     


        /*

        if($loaded)

        {

            $modelOpiekun->save();

            $modelZwierze->save();

            $modelPobyt->save();

        }

        */


        return $this->render('index', 

        							  [ 'modelOpiekun' => $modelOpiekun,

        								'modelZwierze' => $modelZwierze,

        								'modelPobyt' => $modelPobyt,

                                        'loaded' => $loaded

        							  ]

        					);


    }


}


?>

i widok




<?php


use yii\helpers\Html;

use yii\widgets\ActiveForm;


/* @var $this yii\web\View */

/* @var $model app\models\Opiekun */

/* @var $form ActiveForm */

?>

<div class="index">


    <?php $form = ActiveForm::begin();


        //if($loaded) { echo "Formularz zapisany w bazie."; }

        echo var_dump($loaded);


    ?>




        <?= $form->field($modelOpiekun, 'nazwisko') ?>

        <?= $form->field($modelOpiekun, 'telefon') ?>

        <?= $form->field($modelOpiekun, 'imie') ?>

        <?= $form->field($modelOpiekun, 'email') ?>

        <br><br>


		<?= $form->field($modelZwierze, 'gatunek') ?>

        <?= $form->field($modelZwierze, 'imie') ?>

        <?= $form->field($modelZwierze, 'plec') ?>

        <?= $form->field($modelZwierze, 'wiek') ?>

        <?= $form->field($modelZwierze, 'kolor') ?>

        <br><br>


        <?= $form->field($modelPobyt, 'od') ?>

        <?= $form->field($modelPobyt, 'do') ?>


		


    

        <div class="form-group">

            <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>

        </div>

    <?php ActiveForm::end(); ?>


</div><!-- index -->




Serdeczne dzięki za pomoc,

Pozdrawiam

loadMultiple() służy do załadowania kilku modeli tej samej klasy, więc w tym wypadku lepiej użyć przykładu z http://www.yiiframework.com/doc-2.0/guide-input-multiple-models.html#getting-data-for-multiple-models gdzie dzieje się dokładnie to, co chcesz osiągnąć (jak mniemam).

PS. Unikaj języka polskiego w kodzie, technicznie jest poprawnie, ale pokazać potem obcojęzycznym gorzej.