Yii2 Plusieurs instances d'un même modèle

Je veux obtenir multiplie instance du même modèle dans mon contrôleur. J'ai vu ce wiki pour Yii 1.1 et essayé comme ça, mais dans mon code seulement en dernière instance dans le formulaire a été acceble de contrôleur, mon code est ici (j'ai commenté le code d'erreur et les valeurs de la variable):

$model = new Person(['scenario' => 'create_update']);
$contractDate = new DatePart(); //DatePart is my own class
$contractExpirationDate = new DatePart(); //DatePart is my own class

if ($model->load(Yii::$app->request->post()) &&
    $contractDate->load(Yii::$app->request->post()) &&
    $contractExpirationDate->load(Yii::$app->request->post())){

    Yii::info(Yii::$app->request->post(),'test'); //only one instance of Person and one instance of DatePart are available here
    Yii::info($_POST['DatePart'],'test'); //only last instance of DatePart (contractExpirationDate in html form) is available here
    Yii::info($_POST['DatePart'][0],'test'); //Error: Undefined offset: 0
    Yii::info($_POST['DatePart'][1],'test'); //Error: Undefined offset: 1

    $model->save();
    return $this->redirect(['view', 'id' => $model->id]);
} else {
    return $this->render('create', [
        'model' => $model,
        'contractDate' => $contractDate,
        'contractExpirationDate' => $contractExpirationDate,
    ]);
}

C'est ma forme vue dans _form.php:

<?php
use yii\helpers\Html;
//use yii\widgets\ActiveForm;
use kartik\widgets\ActiveForm;
use common\models\DataOperations;
/* @var $this yii\web\View */
/* @var $model app\models\Person */
/* @var $contractDate backend\viewModels\DatePart */
/* @var $contractExpirationDate backend\viewModels\DatePart */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="user-form">
<?php
$form = kartik\widgets\ActiveForm::begin(
[
'id' => $model->isNewRecord ? 'user-form-create' : 'user-form-update',
'type' => ActiveForm::TYPE_VERTICAL,
//'enableAjaxValidation' => true,
'fieldConfig' => [
//'autoPlaceholder'=>true
]
]);
?>
<?= $form->field($model, 'name')->textInput(['maxlength' => 60]) ?>  
<?= $form->field($model, 'family')->textInput(['maxlength' => 60]) ?>
<?= $form->field($model, 'mobile')->textInput() ?>
<?= $form->field($contractDate, 'year')->textInput() ?>
<?= $form->field($contractDate, 'month')->textInput() ?>
<?= $form->field($contractDate, 'day')->textInput() ?>
<?= $form->field($contractExpirationDate, 'year')->textInput() ?>
<?= $form->field($contractExpirationDate, 'month')->textInput() ?>
<?= $form->field($contractExpirationDate, 'day')->textInput() ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>  
</div>

Il est le résultat du journal pour:
Yii::info(Yii::$app->request->post(),'test')
dans le débogueur comme vous l'avez vu seulement la dernière Partie de la disposition, mais j'ai deux DatePart instance du modèle (contractDate et contractExpirationDate):

[
'_csrf' => 'Vl81R0ZvMk1hD1oELT9aDzkIe3EPHFgiIBJTBhA9RD8GbFM.AhlVBw==',
'Person' => [
'name' => 'test name',
'family' => 'test family',
'mobile' => '09121212123',
],
'DatePart' => [
'year' => '2015',
'month' => 'Jun',
'day' => 'Mon',
],
]
  • Moyen en dollars de votre modèle, seule la dernière valeur est insérée dans un tableau ?
  • Non, je seulement obtenir le dernier modèle de DatePart type de contrôleur variable post. J'ai ajouté quelques informations à la question. (contenu du journal)
  • merci de poster votre avis, ce qui vient dans $_POST dépend de votre forme et de la façon dont vous le présenter dans la vue
InformationsquelleAutor b24 | 2014-07-19