我想要一個基於其他模型的下拉列表創建「Feuille de jour」的窗體。窗體(多實例)從其他多個模型的下拉列表Yii2
事實上,我有4個通過id鏈接的表格:「Feuille de jour」表格具有表格「poste FDJ」,「categorie FDJ」和「personnel」中的id。
當我創建「Feuille de jour」時,我希望能夠選擇(在下拉列表中)「poste FDJ」,「categorie FDJ」和「personnel」的名稱,並且在我提交時該表格保存了每個名稱的ID。
現在,當我點擊提交,頁面的再軋但僅此而已......
我知道這是可以保存多個模型的一種形式,我認爲我可以在此啓動,但它不會工作。
有人能幫助我嗎?
有我創建功能控制器(即曾與一個 「簡單」 的形式合作),我的觀點:
我機能的研究創造:
public function actionCreate()
{
$model = new FeuilleDeJourResponsable();
$meteo_prevision = new MeteoPrevision();
$poste_fdj = new PosteFdj();
$categorie_fdj = new CategorieFdj();
$personnel = new Personnel();
if ($model->load(Yii::$app->request->post()) && $meteo_prevision->load(Yii::$app->request->post()) && $poste_fdj->load(Yii::$app->request->post()) && $categorie_fdj->load(Yii::$app->request->post()) && $personnel->load(Yii::$app->request->post()) && FeuilleDeJourResponsable::validateMultiple([$model, $meteo_prevision, $poste_fdj, $categorie_fdj, $personnel]))
{
$poste_fdj->save(false);
$categorie_fdj->save(false);
$personnel->save(false);
$model->ID_Poste_FDJ = $poste_fdj->ID_Poste_FDJ; // no need for validation rule on user_id as you set it yourself
$model->ID_Categorie = $categorie_fdj->ID_Categorie; // no need for validation rule on user_id as you set it yourself
$model->Code_Personnel = $personnel->Code_Personnel; // no need for validation rule on user_id as you set it yourself
$model->save(false); // skip validation as model is already validated
$meteo_prevision->Date_Calendaire = $model->Date_Calendaire; // no need for validation rule on user_id as you set it yourself
$meteo_prevision->save(false);
return $this->redirect(['feuille_de_jour_responsable/view', 'Date_Calendaire' => $model->Date_Calendaire]);
} else {
return $this->render('create', [
'feuille_de_jour_responsable' => $model,
'meteo_prevision' => $meteo_prevision,
'poste_fdj' => $poste_fdj,
'categorie_fdj' => $categorie_fdj,
'personnel' => $personnel,
]);
}
}
而我的觀點:
<?php
$reqNomPoste = 'SELECT Nom_Poste_FDJ,ID_Poste_FDJ FROM poste_fdj';
$nomPoste = PosteFdj::findBySql($reqNomPoste)
->asArray()
->all();
/*$IDPoste = array();
$i = 0;
foreach ($nomPoste["ID_Poste_FDJ"] as $ID)
{
$i++;
$IDPoste = $ID;
}*/
//var_dump($nomPoste);
$reqNomPersonnel = 'SELECT Nom_Personnel,Code_Personnel FROM personnel';
$nomPersonnel = Personnel::findBySql($reqNomPersonnel)
->asArray()
->all();
//var_dump($nomPersonnel);
$reqCategorie = 'SELECT Nom,ID_Categorie FROM categorie_fdj';
$categorie = CategorieFdj::findBySql($reqCategorie)
->asArray()
->all();
//var_dump($nomPersonnel);
$form = ActiveForm::begin();
echo FormGrid::widget([
'model'=>$feuille_de_jour_responsable,
'form'=>$form,
'autoGenerateColumns'=>true,
'rows'=>[
[
'attributes'=>[
'ID_Poste_FDJ'=>['type'=>Form::INPUT_DROPDOWN_LIST, 'items'=>PosteFdj::find()->select(['Nom_Poste_FDJ', 'ID_Poste_FDJ'])->indexBy('ID_Poste_FDJ')->column(), 'hint'=>'Choisir Poste'],
//::findBySql('SELECT Nom_Poste_FDJ,ID_Poste_FDJ FROM poste_fdj'), 'hint'=>'Choisir Poste']
'Code_Personnel'=>['type'=>Form::INPUT_DROPDOWN_LIST, 'items'=>Personnel::find()->select(['Nom_Personnel', 'Code_Personnel'])->indexBy('Code_Personnel')->column(),'hint'=>'Select Personnel'],
'ID_Categorie'=>['type'=>Form::INPUT_DROPDOWN_LIST, 'items'=>CategorieFdj::find()->select(['Nom', 'ID_Categorie'])->indexBy('ID_Categorie')->column(), 'hint'=>'Choisir Categorie'],
]
],
[
'attributes'=>[
//'Date_Calendaire'=>['type'=>Form::INPUT_TEXT, 'options'=>['placeholder'=>'Enter username...']],
//'Date_Calendaire'=>['type'=>Form::INPUT_WIDGET, 'widgetClass'=>'\kartik\widgets\DatePicker', 'hint'=>'Enter birthday (mm/dd/yyyy)'],
'Date_Calendaire'=>['type'=>Form::INPUT_WIDGET, 'widgetClass'=>'\kartik\widgets\DatePicker',
'options' => [
'pluginOptions' => [
'todayHighlight' => true,
'format' => 'yyyy-mm-dd',
'multidate' => true,
'multidateSeparator' => ' ; ',
],
],
'hint'=>'Select Date',
],
]
],
[
'attributes'=>[
'actions'=>[ // embed raw HTML content
'type'=>Form::INPUT_RAW,
'value'=> '<div>' .
Html::resetButton('Reset', ['class'=>'btn btn-default']) . ' ' .
Html::submitButton('Submit', ['class'=>'btn btn-primary']) .
'</div>'
]
],
],
]
]);
?>
<?php ActiveForm::end();?>
謝謝! =)
編輯:
我與功能並重試從警予創建(我不知道爲什麼,我以前交的嘗試:/)
我funcion創建:
public function actionCreate()
{
$feuille_de_jour_responsable = new FeuilleDeJourResponsable();
if ($feuille_de_jour_responsable->load(Yii::$app->request->post()) && $feuille_de_jour_responsable->save()) {
return $this->redirect(['view', 'Date_Calendaire' => $feuille_de_jour_responsable->Date_Calendaire, 'ID_Poste_FDJ' => $feuille_de_jour_responsable->ID_Poste_FDJ, 'ID_Categorie' => $feuille_de_jour_responsable->ID_Categorie, 'Code_Personnel' => $feuille_de_jour_responsable->Code_Personnel]);
} else {
return $this->render('create', [
'feuille_de_jour_responsable' => $feuille_de_jour_responsable,
]);
}
}
I try to save multiple "Feuille de jour" in same time but it didn't work.
There is my fuction create now :
public function actionCreate()
{
/* $feuille_de_jour_responsable = new FeuilleDeJourResponsable();
if ($feuille_de_jour_responsable->load(Yii::$app->request->post()) && $feuille_de_jour_responsable->save()) {
return $this->redirect(['view', 'Date_Calendaire' => $feuille_de_jour_responsable->Date_Calendaire, 'ID_Poste_FDJ' => $feuille_de_jour_responsable->ID_Poste_FDJ, 'ID_Categorie' => $feuille_de_jour_responsable->ID_Categorie, 'Code_Personnel' => $feuille_de_jour_responsable->Code_Personnel]);
} else {
return $this->render('create', [
'feuille_de_jour_responsable' => $feuille_de_jour_responsable,
]);
}*/
$count = count(Yii::$app->request->post('FeuilleDeJourResponsable', []));
$array_feuille_de_jour_responsable = [new FeuilleDeJourResponsable()];
for($i = 1; $i < $count; $i++) {
$array_feuille_de_jour_responsable[] = new FeuilleDeJourResponsable();
}
if (FeuilleDeJourResponsable::loadMultiple($array_feuille_de_jour_responsable,Yii::$app->request->post(),"FeuilleDeJourResponsable"))
{
foreach ($array_feuille_de_jour_responsable as $feuille)
{
$feuille->save(false);
}
return $this->redirect('index');
//return $this->redirect(['view', 'Date_Calendaire' => $feuille_de_jour_responsable->Date_Calendaire, 'ID_Poste_FDJ' => $feuille_de_jour_responsable->ID_Poste_FDJ, 'ID_Categorie' => $feuille_de_jour_responsable->ID_Categorie, 'Code_Personnel' => $feuille_de_jour_responsable->Code_Personnel]);
} else {
return $this->render('create', [
'feuille_de_jour_responsable' => $array_feuille_de_jour_responsable,
]);
}
}
有了它,我有一個錯誤:「 無效配置 - yii \ base \ InvalidConfigException必須設置'formName'或必須設置從'\ yii \ base \ Model'擴展的有效'model'屬性。
有人有想法嗎?
謝謝你回答我! 1.我忘了考慮這部分代碼。它用於測試下拉列表。我不再使用它了) 2.我的課程擴展已經開始:「控制器」然後,我不能再擴展一個... 3.我使用[link](http:// demos。 krajee.com/builder-details/form-grid)爲我的表單網格,但我明白,我必須使用表格形式(如[鏈接](http://demos.krajee.com/builder-details/tabular-form? page = 2&per-page = 10)),用'dataProvider'=> $ dataProvider'。 我正在尋找,但我不明白如何使用它。 – Sarah
「控制器」應該在Controller類中擴展,在Model類中,你應該擴展我寫的東西('yii \ base \ Model')。對於'dataProvider'使用[本指南](http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/)(其中它從'公共函數搜索($ params){'和所有寫入的內容開始,除了'$ this-> addCondition'之外)。 –
我的模型已經擴展了\ yii \ db \ ActiveRecord。我搜索並瞭解dataprovider是什麼,但我認爲我不會爲我想要的工作。我的表單必須爲每個日期(從日期選擇器窗口小部件中選擇)創建一個具有除日期以外的所有相同屬性的新「Feuille de jour」。而且我不知道會創造多少「Feuille de jour」。 事實上,這是一個計劃,當有人是可迴應的,它可以是一個月的2天或一個月的30天。我希望用戶能夠簡單快捷地選擇名稱和服務,然後點擊每個日期似乎都很完美。 – Sarah