2009-03-12 3 views
21

CakePHP에서 전역 변수를 만들고 싶습니다. 내가CakePHP에서 전역 변수를 만드는 가장 좋은 방법은 무엇입니까?

var $varName 

처럼 내 app_controller.php 뭔가를에 정의하면 내 컨트롤러의에서

$this->varName 

에 액세스 할 수 있습니다,하지만 난 모델에서 얻을 수 없습니다.

모델에서 액세스 할 수있는 전역 변수를 만들려면 어떻게해야합니까?

런타임까지 $ varName의 값을 알 수 없으므로 bootstrap.php가 옵션이라고 생각하지 않습니다.

답변

30

CakePHP의 Configure class이 저장하고 응용 프로그램 또는 런타임 특정 값을 검색 할 을 사용할 수있는 새. 조심,이 클래스는 다음 에

사실
+6

이 오래된 답변입니다,하지만 당신은 "조심"해야하는 이유 사람이 궁금이 클래스는 CakePHP의가 디자인 된 MVC 패턴을 깰 확실한 유혹 '이기 때문이입니다. 클래스 구성의 주된 목표는 여러 객체간에 공유 할 수있는 중앙 집중식 변수를 유지하는 것입니다. "컨벤션 오버 컨벤션 (convention over configuration)"에 따라 생활하려고 노력하면 우리가 정한 MVC 구조를 깨뜨리지 않게 될 것입니다. " – swiecki

+0

테스트 모드와 라이브 모드에 대한 전역 변수를 넣을 좋은 곳입니까? 우리가 테스트 할 때 다르게 행동하고 싶은 루틴이 있습니다. – zkent

-2

, 왜 당신이 그 일을하는 코드의 다른 부분을 사용, 거기에 저장 아무것도 할 수 있습니다? 이 모델은 컨트롤러가 존재한다는 것을 모를 것입니다.

비즈니스 (모델) 개체 인 경우 해당 개체를 만듭니다. 그렇지 않다면, 모델은 그것을 알지 못한다. 앱

+3

일부 전역 변수는 꽤 표준 적입니다. 예를 들어, 테스트 서버와 프로덕션 서버는 서로 다른 두 개의 도메인에 있으며, 심지어 모델에도 링크를 만들어야합니다. 따라서 글로벌 변수를 사용하면 디자인 원칙이 전혀 깨지지 않습니다. 실제로 잠재적으로 설계 원칙을 어 기지 않게 할 수 있습니다. –

+4

단순한 값 목록을 위해 모델을 만들기 위해 추가 데이터베이스 호출/cpu cyles/disk를 읽을 가치가없는 간단한 것들이 있습니다. 설계 원칙은 바로 그것입니다 - 원칙. 때때로 현실 세계에는 원칙이 적용되지 않습니다. – Hippyjim

29

를 참조 응용 프로그램/설정/bootstrap.php

에서 정의 할 수 있습니다. 예 :

Configure :: write ('Company.name', 'Pizza, Inc.'); ;

구성 : ('Company.name') 읽기 :

는 코드 사용의 어떤 장소에서 나중에 변수를 읽으려면 // yields : 'Pizza, Inc.' - Configure Class CakePhp
구성 클래스 : 전역 상수를 저장하는

권장되는 파일은 응용 프로그램/설정/bootstrap.php

더 많은 정보를 참조하십시오입니다. 또는 부트 스트랩에 대한 섹션 3.4.7

+1

도끼의 대답은 정확했지만 예제에 대해서도 +1했습니다. 내가 이것을 검색 할 때 필요한 것. – Hippyjim

+0

괜찮 으면 좋겠지 만 데이터가 사용자별로 다르면 Session 클래스가 유용 할 수 있습니다. – Musa

1

appstart.php에서 app/config/디렉토리에 상수를 정의 할 수 있습니다. 모든 컨트롤러 나 뷰에 전역 적으로 사용할 수 있습니다.

5

app/cofig/core에 전역 변수를 선언 할 수 있습니다.당신이 그런 식으로 인쇄 할 수 있습니다 PHP

Configure::write('variable Name','Variable Value'); 

:

Configure::read('Variable Name'); 
관련 문제