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
Vous devez vous connecter pour publier un commentaire.
Contrôleur:
Vue De La Forme:
Pour compléter b24 réponse.
//Pour Afficher le Formulaire ajouter un foreach:
//- ou - ajouter index
Cela peut être la solution à ce problème :
http://www.yiiframework.com/forum/index.php/topic/53935-solved-subforms/page__p__248184#entry248184