@@ -43,12 +43,14 @@ class SettingsController extends Controller
4343 {
4444 $settings = Setting::find()->indexBy('id')->all();
4545
46- if (Model::loadMultiple($settings, Yii::$app->request->post()) && Model::validateMultiple($settings)) {
46+ if ($this->request->isPost) {
47+ if (Setting::loadMultiple($settings, $this->request->post()) && Setting::validateMultiple($settings)) {
4748 foreach ($settings as $setting) {
4849 $setting->save(false);
4950 }
5051 return $this->redirect('index');
5152 }
53+ }
5254
5355 return $this->render('update', ['settings' => $settings]);
5456 }
@@ -71,10 +73,12 @@ use yii\widgets\ActiveForm;
7173
7274$form = ActiveForm::begin();
7375
74- foreach ($settings as $index => $setting) {
75- echo $form->field($setting, "[$index ]value")->label($setting->name);
76+ foreach ($settings as $id => $setting) {
77+ echo $form->field($setting, "[$id ]value")->label($setting->name);
7678}
7779
80+ echo Html::submitButton('Save');
81+
7882ActiveForm::end();
7983```
8084
@@ -88,20 +92,29 @@ ActiveForm::end();
8892``` php
8993public function actionCreate()
9094{
91- $count = count(Yii::$app->request->post('Setting', []));
92- $settings = [new Setting()];
93- for($i = 1; $i < $count; $i++) {
94- $settings[] = new Setting();
95+ $settings = [];
96+ if ($this->request->isPost) {
97+ $count = count($this->request->post($setting->tableName())) - 1;
98+ for ($i = 0; $i < $count; $i++) {
99+ $settings[$i] = new Setting();
100+ }
101+ if (Setting::loadMultiple($settings, $this->request->post()) && Setting::validateMultiple($settings)) {
102+ foreach ($settings as $setting) {
103+ $setting->save(false);
104+ }
105+ return $this->redirect('index');
95106 }
107+ }
108+ $settings[] = new Setting();
96109
97- // ...
110+ return $this->render('create', ['settings' => $settings]);
98111}
99112```
100113
101114ここでは、デフォルトで一個のモデルを含む ` $settings ` 配列を初期値として作成し、少なくとも一個のテキスト・フィールドが常にビューに表示されるようにしています。
102115そして、受信したインプットの行数に合せて、配列にモデルを追加しています。
103116
104- ビューでは javascript を使ってインプットの行を動的に追加することが出来ます。
117+ ビューでは JavaScript を使ってインプットの行を動的に追加することが出来ます。
105118
106119### 更新、作成、削除を一つのページに組み合わせる
107120
0 commit comments