2010-07-21 3 views
1

cakePHP 1.26을 사용하고 있습니다.cakePHP의 Set() 구성 요소에 대한 질문

function testing(){ 
$userinfo=$this->Test->findAllByuser_id(); 
$this->set('userinfo',$userinfo); 
} 

가 좀 배열 데이터를 포함 변수 "사용자 정보"는 testing.ctp에만 액세스라고 founf : 제어기에서
는 I 함수를 얻었다. '내가 할 수있는 설정() 함수에 의해 정의 된 변수를 제공하는 방법을 확실하지 않다, 그러나

$this->Session->write('userinfo', $userinfo);  

:
다른 .ctp 파일에 접근, 나는이 도우미 사용했다 "사용자 정보"변수를 만들려면 다른 .ctp 파일은 액세스 할 수 있지만 세션은 액세스 할 수 있습니다.
Session을 사용하는 대신 다른 방법을 사용하여 동일한 작업을 수행하는 가장 좋은 방법은 무엇입니까?
알려주세요.

답변

1

또한 함수를 모델에 캡슐화 할 수도 있습니다. 그런 다음

function getUserinfo($id) 
{ 
    return $this->findByUser_id($id); 
} 

당신이 사용자 모델

/*in another controller*/ 
function someAction($uid) 
{ 
    $this->User = ClassRegistry::init("User"); // or you can use `$uses = array('User');` 
    $this->set("userinfo",$this->User->getUserInfo($uid)); 
} 
을 초기화와 다른 컨트롤러에 전화 사용자 모델에서

2

일반적으로 컨트롤러의 각 방법은 해당보기 (컨트롤러 이름에 따라 명명 된 메서드 이름에 따라 명명 된 폴더에있는 ctp 파일) 와만 통신합니다. 이 컨트롤러의 이름이 Tests 인 경우 testing() 메서드의 변수 set()은 파일 인 views/tests/testing.ctp에서만 사용할 수 있습니다.

해당 정보를 다른 곳에서 사용할 수있게하려면 세션에서 작업 할 때 해당 정보를 유지하거나 requestAction()과 같은 "외부"방법을 통해 컨트롤러를 실행해야합니다.

출발점으로 컨트롤러의 주어진 메소드가 단 하나의 뷰와 직접 정렬된다는 것을 이해하십시오 (다시 말하면, 지나치게 단순화 될 위험이 있음).