2009-08-30 3 views
3

PHP에서 기본 구성 변수/상수의 수를 설정해야하는 MVC 프레임 워크를 작성하고 있습니다. 예를 들어, config vars는 쿼리를 기록할지, Doctrine 설정을 기록할지, 다른 많은 것들 중에서 로그 파일을 저장할 위치입니다. 개발자가 최소한의 소동으로 새로운 프로젝트를 만들 수 있기를 원하기 때문에 이러한 구성 변수에는 기본값이 있어야합니다. 그러나이 프레임 워크를 유용하게 사용하려면 프로젝트 부트 스트랩 파일이나 컨트롤러 또는 모델에서이 기본값을 무시할 수 있어야합니다. 상수를 사용하고 싶지만 덮어 쓸 수는 없습니다. 내가 보지 못하는 간단한 해결책이 있어야하는 것처럼 느껴진다. (아마도 디자인 패턴 일까?) 모든 조언을 주시면 대단히 감사하겠습니다.응용 프로그램 구성 설정을 관리하기위한 아이디어/솔루션 찾기

답변

5

을이 같은 상황에서, 나는 아마 것 :

  • /세트 구성 옵션을 얻을 방법을 포함 할 모든 구성 관련
    • 클래스를 처리하는 클래스를 생성; 어떤 응용 프로그램이
    • 또한 기본 값을 정의 할 필요가 적합
  • 클래스를 instanciating 때 구성 값이

을 다시 정의 할 수있는 .INI 또는 .xml 파일을 사용하는 경우 :

  • 는 이미 디폴트 값은
  • 당신은 .INI 또는 .xml 파일을 구문 분석이
  • ,
  • 해당 구성 파일에 정의 된 각 값은 클래스에 정의 된 해당 기본값을 대체하는 데 사용됩니다.

    • 아직도 그 구성 클래스를 가지고 있지만,
    • 하나를 가지고있는 기본 값을 저장하는 데 사용하지 :


    해결책 조금 더 복잡하지만 어쩌면 더 나은에있을 수 있습니다. ini 또는 .xml 파일로 기본값을 저장합니다.

  • .ini 또는 .ini 파일이 하나 있습니다.XML 파일이있는 사람들은 기본적으로 하나의
  • 로드 디폴트 값을 포함하는 파일에 정의 된 값을 대체 할 수 있으며, 다음이 솔루션의

장점을 특정 사람을 포함하는 하나는 다음과 같습니다

  • 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

이 질문에 대한 답은 매우 다양합니다. 내 개인적인 권장 사항은 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 일 것입니다.

관련 문제