2009-09-23 18 views
1

サードパーティの拡張機能を許可するZendベースのWebアプリケーションを構築しています。Zend Framework - 「コードモジュール」またはクラスを動的に追加する

基本的に、このアプリケーションのデータベースには一般的な「コンテンツストア」があります。さまざまな方法で異なるコンテンツをレンダリングするための拡張機能が追加されました。

豊富なメールストアを考える:ユーザーが「カレンダー」アイテムを要求すると、カレンダークラス(または何か)をインスタンス化し、アイテムのコンテンツのレンダリングを依頼します。同じデータベースには、「メール」アイテムが含まれている可能性があります。これらのアイテムは、別のクラス(またはその他のもの)によってレンダリングされます。基本的には、コンテンツアイテムを処理するために必要なメソッドを持つ基本クラスを定義してから、それを継承して特定のアイテムタイプを扱うアドインを作成します。

これらのアドインはそれぞれ独自のビューファイルにアクセスする必要があります。それぞれのビューファイルは、明らかに異なるビジュアルレイアウトを持つためです。

使用可能なすべてのコンテンツレンダラーを予期できません。新しいものは(ある種の方法で)「インストール」されるので、私のアプリケーションは「XYZのデータベース型の列を持つコンテンツを見ると、それをレンダリングするためにXYZのものを呼び出す」と知っている。

おそらく、これは次のようなことです。ユーザーはアプリケーションのURLを参照し、コントローラ内でアクションをトリガーします。そのコントローラはModelメソッドを使用して、どの特定のコンテンツ項目がリクエストされたかを示します。

そこからモデルまたはコントローラ(?)は、データベースから項目を取得する(何かを)呼び出す必要があります(モデルは明らかにこれを行います)。そして、所定のViewを使用してレンダリングします。これは、いくつかのレンダリングされた項目(コンテンツ項目のリストのように)を含む大きなページのPARTになります。

ので、2つの質問:

  • Zend Frameworkの中に、この建築家への最善の方法は何ですか? I do非常に単純なレンダラーは、独自のコード(例:「Note」など)を持たずに、基本クラスから機能を呼び出すだけで済むので、これらのアドインを私が提供しているベースレンダラークラスから継承してほしい。 「メモ」は基本レンダラークラスからの単純化されたレンダリング機能をよく使用するかもしれない)。

  • これらのアドインをアプリケーションに登録するにはどうすればよいですか? .iniファイル、おそらくデータベーステーブル?目指すのは、アプリケーションを操作している人のインストール手順を簡略化することです。たとえば、.iniファイルの編集はデータベースに手動で照会するよりも簡単ですが、新しいコンテンツレンダラーの管理バックエンドUIを登録することもできます。

答えて

2

私はこのためにVisitor Patternを実装します。あなたが特定のメソッドを呼び出すことができます知っているように、

各サードパーティ製の拡張機能は、ユーザーが定義インタフェースを実装する必要があり、そのインターフェイスのinstanceofである任意のオブジェクトにrender()を言います。

各拡張機能は、独自のレンダリングを実装します。おそらく、Zend FrameworkアーキテクチャでView partialを使用しています。それとも、PDFや何か(おそらくそれぞれの拡張機能はコンテンツタイプヘッダーをオーバーライドする必要があるかもしれません)としてレンダリングするために、まったく異なるコードを使用します。

登録方法は、resource pluginsを定義するZend_Applicationフレームワークを参照してください。

関連する問題