我想要一个基于其他模特的下拉列表创建“Feuille de jour”的表单。
事实上,我有4个由id链接的表:表“feuille de jour”的表格中有“poste FDJ”,“categorie FDJ”和“staff”。
当我创建“Feuille de jour”时,我希望能够选择(在下拉列表中)“poste FDJ”,“类别FDJ”和“人员”的名称,当我提交表格,它保存每个名字的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();?>
谢谢! =)
编辑:
我再次尝试使用yii创建的函数(我不知道为什么,我在帖子之前尝试:/)
我的功能创建:
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'属性。“
有人有想法吗?
答案 0 :(得分:0)
我可以说一些混乱的代码但是你应该注意一些重要的事情:
谈论这一部分:
$reqNomPersonnel = 'SELECT Nom_Personnel,Code_Personnel FROM personnel';
$nomPersonnel = Personnel::findBySql($reqNomPersonnel)
->asArray()
->all();
$reqCategorie = 'SELECT Nom,ID_Categorie FROM categorie_fdj';
$categorie = CategorieFdj::findBySql($reqCategorie)
->asArray()
->all();
valid 'model' property must be set extending from '\yii\base\Model'."
表示您需要在模型中扩展yii\base\Model
类。类似的东西:
use yii\base\Model;
class Personnel extends Model
{
// ...
}
GridView
看起来有点奇怪。您尚未在其中添加'dataProvider' => $dataProvider,
及其has 'columns'
属性,而不是'rows'
。你应该首先这些,因为它们非常重要。修复后,您可能有一个工作示例,如果没有,我们可以继续搜索。