2012-02-22 20 views
1

CakePHP 2というPHPアプリケーションを構築しています。 フォームが表示されるページが必要です。データベースに設定が保存された動的フォーム生成

フォームは、データベースに格納された構成に基づいて動的に生成される必要があります。例えば

データベースの内容:

{ 
{name:"Username",type:"text",label:"Username",validation:("required","minlength:6")}, 
{name:"Password",type:"password",label:"Password",validation:("required","minlength:6")}, 
{name:"Submit",type:"submit",value:"submit"} 
} 

私はこの(応相談フォーマット)のようないくつかの設定は、データベースに格納され、HTMLフォームがで生成されることに基づくようにしますランタイム。実行時にconfigを変更すると、フォームも変更されます。 cakePHPにフォーム生成コンポーネントがあることを理解します。

私の質問は、どのようにして実際にデータベースに保存された設定からcakePHPフォームジェネレータを取得し、次にページに到達するのですか?

私はeval()の機能を検討していましたが、実際には安全ではないことを読みましたが、できるだけ避けようとしています。

PS:

Iは、フォームから得られたデータを格納するためのmongodbを使用します。

フォーム設定がデータベースに格納される方法は柔軟ですが、私はそれを文字列として保存することを考えていますが、それは交渉可能です。

フォームの設定をRDBMSデータベースまたはNoSQLデータベースのいずれかのデータベースに保存することもできます。

答えて

2

解析(便利なものは何でも、serialize()ようjson_encode()をデータのシリアル化機能を使用し、またはXMLシリアライザ...)データベースからの設定とhttp://book.cakephp.org/2.0/en/core-libraries/helpers/form.html

// Psuedo-code 
$fields = array(
    'fields' => array(
    'name' => 'username', 
    'type' => 'text', 
    'label' => 'Username', 
    'validation' => array('...validation config...'), 
) 
); 

foreach($fields as $formOptions) { 
    echo $this->Form->input($formOptions['name'], array('label' => $formOptions['label'])); 
} 

などなどを使用してフォームを作成..

+1

+1これは、私は何も 'serialize()'する必要はないと思いますが、あなたのコントローラーで '$ this-> set()'をすべてのフォームフィールド設定で使用し、javascriptを使ってあなたのビュー(ユーザーがページを見たときに変更を表示する必要があるフィールドの場合)またはt彼は見て、プロッパーフィールドをdispaly ... とにかく、私はあなたの問題を参照してください、厳密に2.0関連していないので、同様に1.3の回答を見ることができます – Bogdan

+1

@Bogdanは、自分自身のフォーマットと対になったパーサーではなく:) –

+0

ああ、確かにそれは意味がある、明らかに:) – Bogdan

2

AFAIK、これを行う簡単な方法はありません。ケーキのフォームジェネレータはフォームヘルパーです。あなたはそれをhereで読むことができます。あなたはおそらくあなた自身のパーサーを書く必要がありますが、フォームヘルパーはあなたのために多くを行います。 JSON formatを使用することをお勧めします。これにより、データベースに格納された文字列とPHP内のインデックス付き配列を簡単に移動できます。

関連する問題