1

注: SOにはこれに関連する他の質問がありますが、実際に答えたものはありません。関連するモデル情報の保存を処理する方法はたくさんあるので、サーバー側については心配していません (そして、これを行う方法の例がたくさんあります)。

私が知る必要があるのは、親モデルの作成中に多くの子モデルを追加するビュー コードを実装するにはどうすればよいかということです。

確かに、このページに見られるようなものになるでしょう: http://www.yiiframework.com/doc/guide/1.1/en/form.table。コードがモデルの挿入ではなく、一連のモデルの更新を処理することを除いて。これが私が必要とするものです。

つまり、ユーザーが多くの予定を追加できるイベント フォームがあります (各予定には、1 日、start_time、end_time があります)。Yii ヘルパーを使用してイベント フォーム内の予定フィールドをレンダリングしたいので、検証やその他のフレームワークの利点が得られます。

ユーザーは、イベントの作成中に同じイベントに複数の予定を追加できます。

4

2 に答える 2

2

モデルの配列 (子モデルであるかどうかは関係ありません) をレンダリングするための正しい構文では、問題のモデルのインスタンス化が必要です。したがって、ビューで次のようなことを行う必要があります。

$child = new ChildModel();
$form->textFieldRow($child,'[]PROPERTY',$dateAtts);

PROPERTY は、テキスト ボックスをレンダリングするプロパティの名前です。

親モデルの作成と更新の両方に単一のフォームが必要な場合、唯一の方法は、フォームをレンダリングするためだけにモック オブジェクトをインスタンス化することです。私の場合、 Event には Appointment のコレクションがあるため、コントローラー アクションで次のようにしました。

$event->appointments = array(new Appointment);

次に、ビューで

<?php foreach($model->appointments as $id => $item) : ?>
    <div class="appointment">
        <?php echo $form->textFieldRow($item,'[$id]day',$htmlAtts); ?>
    </div>
<?php endforeach; ?>

関連するモデルを保存するために、この拡張機能を試してみます: https://github.com/yiiext/with-related-behavior

アップデート

$_POST の親モデル配列内に子モデルを含める場合は、name 属性を上書きする必要があります。質問の例に従って...

$form->textFieldRow(
            $item,
            '[$id]day', 
            array('name' => "Event[appointments][$id][day]")
       );
于 2012-07-17T09:41:49.920 に答える