2010-05-18 8 views
0

나는 웹 응용 프로그램에서 CAKEPHP 프레임 워크를 사용하여 작업하고 있습니다. 여기서는 여러 페이지에 하나의 변수를 요청해야합니다 (모든 페이지에는 다른 컨트롤러가 있음). 변수가 모든 다른 컨트롤러에서 선언되지 않았기 때문에 여러 페이지에서 오류가 발생하는 것은 oubvious입니다.하나의 변수 및 다중 컨트롤러

해결 방법이 있습니까? 나는 이미 다른 컨트롤러에서 컨트롤러를 임포트하기 위해 app :: import를 시도했지만, doens't는 작동하지 않는 것처럼 보인다. (여전히 정의되지 않은 변수 에러를 얻는다.)

Thnx와 협력하십시오.

감사합니다, 사이먼

+0

어떤 cakephp 버전을 사용하고 있습니까? –

답변

2

Duplicate question,하지만 난 그게 내가 여기에 내 대답 붙여 넣을 수 있습니다 조금 더 나은 표현한 생각 : 내가 생각 deceze의 의견과 DavidYell의 대답의 어깨에

상임를 그들은 당신이 얻으려고하는 것에 대한보기 흉하지 않은 모습을 긁어 낼 수있었습니다. 아마도. 그래서 당신이보고있는 것에 대한 느슨한 이해와 함께 무엇을 가지고 있는지 ...

기본적으로 PagesController::display() 메서드는 홈페이지보기 (home.ctp)를 생성합니다. 나는 이것이 당신이 말하는 것임을 의심합니다. 즉, SectionsController의 메소드에서 설정하는 변수는 다른 컨트롤러의 다른 메소드로 작성된 홈페이지에서 사용할 수 없습니다. 모든 뷰에 사용할 수있는 변수를 원한다면 몇 가지가 당신이 할 수 있습니다 :

  1. 당신은 당신의 config/core.php 파일의 변수를 설정할 수는 상수 인 경우
  2. 당신은 에서 설정할 수 있습니다 (일반적으로 권장하지 않음) . 그 말은, 동적 코드가 아닌 하드 코드를 사용한다는 의미입니다. 변수를 상수로 생성하는지 여부는 중요하지 않습니다.
  3. 에서 beforeFilter() 또는 beforeRender() 방법으로 설정할 수 있습니다. 모든 사용자 지정 컨트롤러 (프로토콜을 따랐다 고 가정)는 AppController에서 상속받습니다. 이 경로를 선택하면 cake/libs/controller/app_controller.php 사본을 만들어 app/ 디렉토리에 저장하십시오.

이러한 내용은 내가 이해하는 한 귀하의 요구를 가장 잘 충족시킬 것이라고 생각합니다. 모든 페이지에 변수가 사용할 수 있는지 확인하기 위해

+0

글쎄, 세 가지 솔루션을 모두 시도했지만 나에게 도움이되지는 않을 것입니다. :( – Simon

+0

아마도 앱 시나리오에 대해 좀 더 구체적으로 설명 할 수있을 것입니다.이 모든 것들이 뷰에 변수 데이터를 제공 할 것입니다. , 우리는 아마 더 많은 정보가 필요합니다. –

0

한 가지 방법은 전면 컨트롤러 (일반적으로 index.php) 또는 (예 : 글로벌 CONFIGS 같은) 다른 항상 포함 파일을 정의하는 것입니다, 다른 옵션을 사용할 수 있습니다 $_SESSION 슈퍼 글로벌

0

를 사용할 수있는 beforeRender() 또는 AppController에서 beforeFilter()callback methods. :)

이들은 모든 페이지 요청시 호출됩니다.:)

0

다른 컨트롤러에서 값에 액세스하려면 해당 값을 다른 컨트롤러 메서드에서 액세스 할 수 있도록 데이터베이스 레코드에 저장해야합니다. 각 컨트롤러 호출은 자체 컨텍스트에 존재하며 스크립트 외부에 저장된 데이터 만 공유 할 수 있습니다.

이와 같은 상황에서 환경 설정 테이블 (ID, 이름, 값 등의 필드가 있음)을 만들었습니다. 그런 다음 app_controller에 $ uses 값을 추가하여 모든 컨트롤러에서 사용할 수 있도록합니다. 마지막으로, 찾기 호출로 잡으십시오. (즉, $ foo = $ this-> Preferences-> find ('first', array ('조건'=> 배열 ('이름'= 'foo'))));

관련 문제