カスタムの動的に生成されたフォームの背後にある設計は何ですか?
drupal の CCK のようなものを実装したいと考えています。
コントロール パネルで、フォームの所有者は、フォームにどのフィールドを配置するか、フォーム フィールドを配置する順序、および「必須: はい/いいえ」などのフィールドの属性を設計します。
フォームが設計されると、エンド ユーザーはフォームに入力して送信します。
現在、ユーザーにカスタム フォームを作成してもらうことができます。問題は、フォームのコンテンツの保存と取得にあります。
通常、フォームを作成すると、誰のデータが db に保存され、フォームのデータをデータベースに入力するために必要なコードも作成されます。フォームがほぼ毎回異なるフィールドで常に変化している場合、このコードはどのように記述されるのでしょうか?
基本的に、フィールドの数や種類に関係なく、カスタム フォームの保存と取得を可能にするデータベース設計を理解する必要があります。
フォームを送信するたびに新しいテーブルを作成したくはありませんし、フォームごとに手動でコードを記述したくもありません。
これらは私が必要とする主なフィールドタイプです
- テキストボックス
- リストを選択
- ラジオボタン
- チェックリスト
- 日付フィールド
- テキストエリア
以下は、私が思いついたデータベース設計です
表1
id、formid、type、position、name、value、select(foreign)、multiple
id: そのレコードの一意の ID、auto
formid: 一意のフォーム ID。特定のフォームのすべてのフィールドが同じフォーム ID を共有します。
タイプ: テキストボックス、選択リスト、ラジオなどの可能性があります。
位置: フィールドは 1 番目、2 番目、または 5 番目ですか?
name: フィールドの一意の名前
値: テキストボックスの場合、デフォルト値がここに入力されます。フィールドのタイプが値を必要としない場合は、null のままになります。
select (foreign): 選択リスト ボックスの場合、外部 ID 番号が表示されます。
複数: そのリストボックスで複数選択を許可する場合、値は 1 になります。それ以外の場合は null になります。
table2 ID、選択、値
したがって、選択リスト ボックス フィールドが必要な場合は、table1 にタイプが selectbox になり、table2 に「select」に関連する外部キーの値が表示されます。
テキスト領域が必要な場合は、table1 に入力するとテキスト領域になります。デフォルト値が必要な場合は入力します。それ以外の場合は null になります。
table1 にはすべての属性のリストが含まれているわけではありませんが、要点はわかります。必要なフィールド タイプに応じて、入力する必要がある属性が決まります。その属性が追加のデータを格納する必要がある場合、たとえば選択リスト ボックスなど、table2 で行われたように単純に関係を作成します。
フォームをレンダリングするために、システムはデータベース内のデータを解釈し、それに応じてフィールドを作成します。
ここまでは順調ですが、フィールドが常に変化している場合、どのようにしてデータをデータベースに保存するのでしょうか?
そのようなデータを保存するには、どのようなデータベース設計が必要ですか?
上記はフォームを動的に生成する正しい方法ですか?