1

20 ページの文書に 20 のフォームが含まれています。セクションごとに編成されています。

Section 1:
 1.1 - Form 1
 1.2 - Form 2
 1.3 - Form 3
Section 2:
 2.1 - Form 1

...etc...

次のようなコントローラーのセットアップがあります(今のところ):

class Section extends CI_Controller {
    public function index($section_id) {
        $this->section_model->_require_valid_section($section_id);

        $data['view'] = "section/index";
        $this->load->view('app/template', $data);
    }
}

これら 20 のフォームのビューを作成する必要があります。各フォームには異なるデータがあります。1 つは「名前、メール、電話」、次は「人名、施設名、役職」であり、それらは関連していません。フォームごとにテーブルを用意するのはおそらくばかげていると思います(いつでもフォームが増える可能性があります)ので、次のようなテーブルを作成できます。

Section | Key     | Value
-------------------------
1.1      name       Randolph
1.1      phone      1111111111
2.1      person     Junior
2.1      title      Playa 

これらのフォームのリクエストを処理およびルーティングするようにコントローラーを設定する方法を知りたいです。

それぞれに関数を作成するのが理想的でしょうか?

public function form_1_1() {
   $this->section_model->save_1_1();
}
public function form_1_2() {
   $this->section_model->save_1_2();
}

index()経由でリクエストをルーティングできますcall_user_func()が、それが正しい方法かどうかはわかりません。

4

2 に答える 2

0

いつでも各フォームに非表示の入力を配置し、コントローラー関数内で非表示フィールドの値を処理することができます。

各フォームのビューに追加:

<input type="hidden" name="form_name" value="form_1" />

コントローラーに追加:

$form_submitted = $this->input->post('form_name');

$form_submitted次に、スイッチまたは if を使用して、変数に基づいてデータを処理します。

于 2012-06-05T17:33:50.873 に答える
0

それは、データを構造化するために必要なもの、ストレージ、または後で検索/参照する必要があるかによって異なります。

迅速で可能な答えは、すでに行っているように単一のテーブルを使用することですが、次のような列を参照します: entry_idform_typeuseridなど...data

列にはdataシリアル化されたフォーム要素/値が格納されるため、検索が容易ではなくなる可能性がありますが、複数のフォーム送信を格納するためのクリーンな方法が提供されます。

データを取り戻すには、すべての entry_id をユーザー ID などで選択します。値を簡単に操作できる配列にシリアル化解除します。

あなたの他のオプションは、DataMapper のようなものを取得し、フォーム間の 1 対多、または多対多の関係を処理することです。

データマッパーのリファレンス:
http://datamapper.wanwizard.eu/

于 2012-06-05T17:46:41.590 に答える