2011-02-03 28 views
0

動的フォームの作成に関する設計上のアイデアを探しています。動的フォームの作成/メタプログラミング/ PHP

私が現在持っていることは例えばいくつかのプロパティ/変数を持つモデルの束です:

class Group extends IDKModel { 

    /** 
    * @Form 
    */ 
    public $title; 
    /** 
     * @Form(validation="{my validation rules here}") 
    */ 
    public $permissions; 
} 

その例でフォームPHPAnnotationは、フォーム要素としてそれを定義し、検証配列が検証に組み込まれていますそれのルール。今私が抱えている問題は、条件文を実装する方法がわかりません。

たとえば、ユーザーが管理者である場合にのみ$権限を表示する方法。時間帯が12:00 GMTを超えている場合、$ titleを表示する方法。基本的にあらゆる種類の条件付き。

はirc.quakenet.orgで#phpから撮影:

[10:50] <ramirez> i would not try to stick all of the meta-info under one attribute 
[10:50] <ramirez> it'd be much cleaner to do something like 
[10:50] <ramirez> @FormElement 
[10:51] <ramirez> @Validator(params) 
[10:51] <ramirez> etc 
[10:52] <ramirez> anyways, I would probably do something like.. @Filter(name="Group",value="admin,editor") 
[10:53] <ramirez> then for each filter you want to implement, you'll create a class like "Model_Filter_Group", which would be used for eg. the above filter 
[10:53] <ramirez> that class in this case would simply explode the groups by comma and see if user is in any of those groups 
[10:54] <ramirez> you can use that for any kind of filtering, eg: @Filter(name="PastTime", value="12:00") 

誰もが簡単にアイデアを持っていますか?

+0

に見つけた唯一の基礎だけでなく、チュートリアルを網羅検証ロジックとフォームのプレゼンテーションロジックを混在しないようにしてください。これは簡単な質問ではありませんが、解決策があります。そのちょうどかなり大きいと私はそれをどこに投稿するか分からない。 – Petah

+0

なぜプレゼンテーションロジックと検証ロジックとを分離する必要がありますか?私が検討しているのは、@Form、@Validation、@Filterの3つの異なるタイプのPHPアノテーションです。@Formはフォーム要素として定義します。@Validationはそれを検証するためのすべてのルールを持ち、@Filterはプレゼンテーションロジックを処理します。 – Peeter

+0

それはあなたがデザインパターンでやったことではないので、私は学びました。注釈を一括して使うべきではないと思います。 – Petah

答えて

0

私はあなたがZend Frameworkの中にZend_Formのコンポーネントに見てお勧め: Zend Framework Reference:Zend_Form

Zend_Formでは、非常に強力で高度にカスタマイズ可能ですが、良いOOPの設計により提供されるその機能のすべてを見ることは少しも複雑になることがあります。

ZFが役に立たなくても、そこに良いアイデアを見つけることができます。

ところで:マニュアルは、一つはウェブ