2012-02-29 1 views
0

私は単純化されたMVC型構造であるPHPのアプリケーションを持っています。このアプリケーションは、私の会社などが運営する12以上のサイトで使用されます。構造体は、コントローラファイル、アプリケーションクラスを含むapplicationというフォルダ、templateなどのサイト固有のコードを含むsiteというフォルダから構成されます。定期的に、私たちは変更を配布するときにコントローラとアプリケーションフォルダを更新するパッチを配布します。その結果、クライアントは、コードが更新されたときに変更を失うことなく、アプリケーションフォルダ内のコアコードを実際に変更することはできません。クライアントがクラスをオーバーライドできるようにすることはできますか?

私はクライアントが望むものを説明することができるので、既存のクラスを拡張する必要があることを伝えます。これを可能にする設計パターンはありますか?今、私は、ユーザーがクラス全体を交換する能力を与えている:

spl_autoload_register('loadSiteClass'); 
spl_autoload_register('loadCoreClass'); 

これは、クラスのためのアプリケーションフォルダで検索する前に、クラスのためのサイトフォルダをチェックしオートローダを使用しています。クラスを完全に置き換える代わりに、既存のクラスを拡張するクラスを自動的に検出、ロード、および使用できる代替方法を見つけることを望んでいます。どんな提案も大歓迎です。前もって感謝します。

サイトの管理者がクラスの拡張を指示する設定を追加できるサイト固有の設定ファイルもありますが、その情報の使用方法はまだ分かりませんそれが提供された場合。

答えて

1

codeigniterの方法は、システムクラスの "client"/"application"フォルダにミラーディレクトリ構造を持っています。次に、システムクラスと同じ場所にファイルを作成し、システムクラスを拡張するだけで、ロードクラスはオーバーライドを最初に探してからフォールバックを探します。いくつかのコード例はこちら

チェック:https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Loader.php#L277

彼らのdocumentationが自分のパターンを理解するために、より役立つかもしれません。

これを行うにはもっと多くの方法があると確信しています...しかし、一般的にはディレクトリ構造と簡単なPHPの "extends"キーワードに対する慣習は私にとって意味があります。

関連する問題