2009-08-30 12 views
3

PHPでMVCフレームワークを構築しています。これには、多くのデフォルトの構成変数/定数を設定する必要があります。例のconfig varsは、ログファイルを保存する場所、クエリー、Doctrine設定などをログに記録するかどうかなどです。私は、開発者が最小限の騒ぎで新しいプロジェクトを作成できるようにするため、これらのconfig変数にはデフォルト値が必要です。しかし、このフレームワークを本当に便利にするには、プロジェクトのブートストラップファイルやコントローラやモデルの中で、これらのデフォルト値を上書きできるようにする必要があります。私は定数を使うのが好きですが、上書きすることはできません。私はちょうど私が見ない単純な解決策(おそらくデザインパターン?)がなければならないかのように私は感じる。どんなアドバイスも大変ありがとうございます。アプリケーション構成設定を管理するためのアイデアやソリューションを探す

答えて

5

このような状況で、私はおそらくだろう:

  • すべての構成関連
    • クラスは/セットの構成オプションを取得するためのメソッドを含んでいるでしょうに対処するクラスを作成します。あなたのアプリケーションは、適切な

クラスをinstanciating設定値を再定義することが可能な、の.iniまたは.xmlファイルを使用する場合それはまた、デフォルト値を定義します

  • を必要とするものは何でも:

    • あなたはすでにあなたがの.iniまたは.xmlファイル
    • を解析し、デフォルト値
    • を持っています
    • この設定ファイルで定義されている各値は、クラスで定義されている値に対応するデフォルト値を上書きするために使用されます。

      • はまだその構成クラスを持っていますが、
      • 、1つを持っているすべてのデフォルト値を格納するためにそれを使用しない:


      ソリューションもう少し複雑な、多分よりよいが、にあるかもしれません。デフォルト値を格納するiniまたは.xmlファイル

    • .iniまたは.iniファイルが1つあります。xmlファイルとは、人々がデフォルト1つの
    • ロードデフォルト値を含むファイルで定義された値を上書きすることができ、その後、このソリューションの

    利点を特定のものを含むものは以下のとおりです。

    • PHPクラスにコンフィグレーション値が格納されていません
    • オーバーライド可能なすべての設定オプションは.ini/.xmlファイルですでに定義されています。つまり、特定のファイルに行をコピー/ PHPクラスを見てみる必要があります。 "これを設定ファイルにどのように変換するのですか?"


    カップルより多くのノート:

    • あなたはそれぞれのリクエストでファイルを再解析しないように、キャッシュ・mecanismのいくつかの種類を使用する場合があります
    • Zend_ConfigZend_Config_Ini役に立つかもしれません;あなたがそれらを使用していない場合でも、あなたがあなた自身のフレームワークを書いているように、あなたは彼らが何をすべきかを見てみることをお勧めします - 私の記憶が正しければ、Zend_Config_Iniは.iniファイルで階層と継承を可能

    楽しんでください!

  • +1

    すばらしい応答をありがとう!私はあなたのためのフォローアップの質問があります:可能なキャッシングメカニズムについてもう少し詳しい情報を提供できますか?私は確かにファイルを再解析することによってリソースを無駄にしたくありません。 –

    +0

    こんにちは。あなたは大歓迎です:-)キャッシングについて:最初のルールはあなたが今そのことを気にするべきではないということです。アプリケーションが動作するまで待ちます。それが必要な場合は、解析された構成データをファイルまたはメモリ(APCまたはmemcacheなど)に格納できます。設定ファイルが変更されているかどうかを確認し、キャッシュを無効にするために変更を考慮に入れておく必要があることを覚えておいてください。もう少し詳しく知りたい方は、http://framework.zend.com/manual/en/zend.cache.frontends.html#zend.cache.frontendsの紹介を読むことができます。ファイル(ZFを使用していない場合でも) –

    1

    私が使用するデザインパターンは次のとおりです。

    class Configuration { 
        String get($key) {...} 
        String set($key, $value) {...} 
    } 
    

    初期実装はすべてデフォルト値でハードコードすることができます。後で、サーバーやプロジェクト固有の構成ファイルの読み込みをスリップさせることができます。必要に応じて柔軟に追加することができます。

    (。私もphp.iniの設定はあなたが望む行動を持っているように見えることに気づいたが、私はあなたが直接そのシステムを活用してどのように表示されていない)

    +0

    これは 'void set(...)'ではないか、古い値を返すべきですか? – nickf

    2

    私は、いくつかのiniファイルを使用することをお勧めします:default.iniと、必要に応じて多くのoverride.ini-sを使用します。その後、単にparse_ini_file()をロードし、array_merge()で1つの設定にマージします。すばやく簡単。

    1

    この質問にはさまざまな回答があります。私の個人的な勧告は、SQLiteに値を格納し、それらの値にアクセスして変更するための別個のスクリプトを持つことです。他の方法については、読んでください。

    これは、オブジェクト指向の仕方や、単純化してユーザーのために物事を作る方法によってかなり簡単です。インストール手順では、ユーザーにファイルを直接編集するよう指示することができます。この場合、ユーザーに定数のファイルを直接編集するよう指示することができます。あなたは、初期設定スクリプトが詳細については、ユーザーにプロンプ​​トを表示し、ファイルを記述している最高とされるよりも、ユーザーからこれらの詳細を隠したい場合は、このルートをたどる

    ほとんどのアプリケーションは、詳細explination

    <?php 
    /** 
    * Global application configuration 
    */ 
    class AWConfig { 
    
        /** 
        * true or false 
        * If the is set to true debug messages will be added to the application logs 
        */ 
        public $DEBUG_MODE = true; 
        /** 
        * Path to Station database 
        * ex (/homepages/26/3/htdocs/databases/stations.db) 
        */ 
        public $DB_STATION = '/homepages/26/3/htdocs/databases/stations.db'; 
        /** 
        * Path to logs database 
        * ex (/homepages/26/3/htdocs/databases/stations.db) 
        */ 
        public $DB_LOGS = '/homepages/26/d175338743/htdocs/weather/dev/metrics/beta2/databases/metriclogs.db'; 
    
        /**** DO NOT EDIT BELOW THIS LINE *****/ 
        public $LIST_STATION_LIMIT = 10; 
        public $MAX_COMPARE = 6; 
    } 
    ?> 
    

    でそれを実装します(config.php、config.ini、config.xml、またはデータベース)に、選択した設定が表示されます。その後、別のスクリプトを編集してください。良い例は、Joomla CMSです。

    関連する問題