2010-08-02 9 views
2

싱글 톤 대신 데이터베이스 처리기 등의 종속성 주입을 사용하는 경우 - configs를 유지하는 것이 가장 좋습니다. 사용자 이름 암호 호스트 등. 클래스 내부에 보관하거나 컨테이너 클래스를 사용하거나 정적 구성 클래스를 사용하거나 파일을 사용합니까?종속성 주입 클래스 - 구성 저장 위치

답변

3

일반적으로 웹 루트 외부의 파일에 보관합니다.

의 config.php :

<?php 
return array(
    'database'=> array(
    'host'=> 'localhost', 
    'dbname'=> 'name_of_db', 
    'username'=> 'myusername', 
    'password'=> 'mypassword', 
    ), 
); 

test.php : 이상적으로

<?php 
$config = include('config.php'); 
mysql_connect($config['database']['host'], $config['database']['username'], $config['database']['password']); 
.... 

, A의 설정 파일을 저장하는 배열을 반환

2

외부 설정 파일은 빠른 해결책이다 익명의 웹 사용자가 읽을 수있는 디렉토리 (그러나 쓰여지지는 않음).

+0

방금이 답변을 발견했으며이를 수행 할 수 있음을 지적 해 주셔서 감사합니다. 포함 된 파일에서 값을 반환 할 수 있는지 전혀 몰랐습니다. 그것은 설정에 완벽하며 내가 시작하는 프로젝트에서 내가하고있는 일입니다. – Compeek

0

정확한 사용 사례에 따라 다르므로 '적합'하기가 어렵습니다. 그러나 여기에 제가 아주 비슷한 문제가있을 때 제가 한 일이 있습니다.

소수의 웹 사이트에 대해 공유 라이브러리 시스템을 설정했습니다. 처음에는 데이터베이스 핸들러 만 제공했지만 ORM 레이어가 빠르게 추가되었습니다. 그 후 대부분의 웹 사이트가 직접 SQL에서 객체 기반 액세스로 다시 작성됨에 따라 추가 개체가 증가했습니다. 또한 공유 라이브러리의 오브젝트 및 다른 요소가 데이터베이스 설정과 같은 기본 설정과 함께 '모듈'에 수집되는 방법을 정의하는 데 사용되는 구성 라이브러리가있었습니다. 또한 호스트 별 설정에 사용 된 코드 트리 외부에 구성 파일을로드하는 기능도 지원했습니다.

ORM 계층의 개체가 자체적으로 구성해야하므로 (선언 할 때 정적 호출이 있었기 때문에) 이름을 지정하여 특정 데이터베이스를 요청하도록하는 것이 쉽지 않았습니다. 그런 다음 이러한 데이터베이스 정의가 모두 선언되었는지 확인하는 문제였습니다 (일반 구성 메커니즘 덕분에 무시할 수있었습니다).

(시간이 조금 걸렸지 만 우리는 데이터베이스를 분리해야하는 지점에 도달했을 때, 다른 데이터베이스에 떨어져 관련 객체를 가리 킵니다 매우 쉽게했고 모든 것이 작동 유지했다.)

하면 대답하기 귀하의 질문 : 비록 구성이 나뉘어져있었습니다. 데이터베이스 호스트 이름, 사용자 이름 및 암호는 모두 코드 내 구성 영역의 한 위치에서 명명되고 정의되었습니다. 그러나 호스트 단위로 오버라이드 될 수 있습니다. 개체 별 설정은 개체가 선언 된 위치입니다. 그리고 그것은 데이터베이스 구성이 이름으로 지정된 곳이기도합니다.