2012-02-15 13 views
0

私はちょうどCakePHPによる始めている私とそう裸:) ...CakePHPの:動的なフォームフィールド

私はすべてのフィールドを持つフォームを持っているが、データベーステーブル「フィールド名」からダイナミックに引か:

ID | FieldName 
-------------- 
11 | username 
22 | password 
33 | Address 
44 | etc 

これは単なる例であり、フォームはより複雑です。

私は、フォームフィールドがモデルテーブルと1:1で一致する場合、Saveメソッドがユーザーであり、新しい行が適切なセルにすべての値で作成されることをphp docで知りました。 しかし、私のサンプルフォームでは、すべてのフィールド値が、次の構造を持つテーブル 'FieldValues'に複数の行に1つずつ入力する必要があります。

ID | FieldId | Value    | DataSet 
--------------------------------------------- 
1 | 11  | 'value for username' | 1 
2 | 22  | 'value for password' | 1 
3 | 33  | 'value for address' | 1 

フィールド識別子= FK Fieldnames.ID

に私は、「古典的な」

foreach field -> $sql = "sql insert query" -> $this->query($sql)' 

を用いた方法でこれを行うことができた私は思っていた私は、「魔法を使うことができています"この課題を解決するためのケーキ。 2番目の質問:「魔法」が可能な場合、2番目のパラメータを追加して各データセットに新しいデータセット値を設定するにはどうすればよいですか?

おかげで、 ヴラド

P.S.これはフォームビルダアプリケーションであり、フィールドは動的でなければならず、静的なフォーム実装(テーブルの列1:1のフィールド名をハードコード)を使用することはできません。フィールド名とナンバーは、なぜ私がデータベースのために引き出しているのかによって異なります。

// FieldsController 
$this->Field->saveFields($this->request->data); 

:あなたのFieldsController追加アクションであなたはこの関数を呼び出すことができ

// Field model 
public function saveFields($data) { 
    foreach($data as $field) { 
     $this->save($field); 
    } 
} 

答えて

1

は、私はあなたのようなあなたのモデル内のメソッドを(あなたがあなたのフィールドを保存する場所)を作成することをお勧めまたは、ClassRegistryを使用して他のコントローラ/モデルで:

// FooController 
$Field = ClassRegistry::init('Field'); 
$Field->saveFields($this->request->data); 

データは次のような正しい形式です:

$data [0] [ ModelName ] = array(
    Field1 => Value1, 
    Field2 => Value2 
) 
+0

ありがとう、私はこのアイデアを試してみます。 –

関連する問題