2012-12-07 4 views
0

i는 사용자 정보에 기록 된 전류를 표시하려고하고 이것은 사용자 이름을 표시하고 내가 표시하기 위해 같은 방법을 사용할 수 있습니다CakePHP의 인증 사용자 정보 내보기에서

echo "Welcome back " .$this->Session->read('Auth.User.username'). " 

를 사용하여 내가이 작업을 수행 할 수 있습니다 낸 해당 데이터베이스 행의 다른 필드가 있지만 다른 필드 중 일부는 언제든지 업데이트 할 수 있지만 로그 아웃하고 다시 로그인 할 때까지는 사용자 페이지에서 업데이트되지 않습니다.

올바른 방법이 있나요? 또는이 더 나은 방법을 수행 할 수 및 어떻게 든 각 페이지로드에 변수를 업데이트하려면 계속하려면 AppController beforeFilter() 일부 코드를 넣을 수 있습니까? 다음 세션은 항상 최신 상태로 될 것이다 - 당신은 단지에있는 사용자 모델 상에 afterSave()을했고,하면 어떻게

+1

당신은 또한 HTML을 확보하기 위해 주위 시간()를 사용한다 세션 데이터 대신 실시간 데이터를 얻을 것을 선호합니다. – mark

답변

0

나는

var $uses = array('User'); 

function beforeFilter(){ 
    $id = $this->Auth->user('id'); //Using the session's user id is fine because it doesn't change/update 
    $user_data = $this->User->findById($id); 
    $user_fname = $user_data['User']['fname']; 
    $this->set('fname', $user_fname); 
} 

//In your view 
echo 'Welcome Back '. $fname . '!'; 
+0

CakePHP 문서에 자세히 설명되어 있지만 다음과 같은 오류가 발생합니다. - 구성원 함수 findById() object – medoix

+0

appController에 User 모델을 포함시키기위한 답이 업데이트되었습니다. –

+0

@TimJoyce, 왜 세션보다는 실시간 데이터를 얻는 것을 선호합니까? 설명 할 수 있습니까? – mgPePe

0

는,이 비 시험이지만, 그것은 작동합니다 것 같다 $this->Session->write('Auth.User') = $user;

설정 변경.

편집 : 귀하의 코멘트 당

, 데이터 액세스 권한이없는 타사 소스에서 가져온, 당신은이 모든 페이지로드에 업데이트되고 있는지 확인해야되는 경우, 그렇다면 AppController의 beforeFilter()는 괜찮습니다.

특정 페이지 또는 특정 요소에만 필요하지만 업데이트를 호출하거나 요소의 requestAction을 통해 호출 할 수 있습니다.

+0

내가 (테스트하지 않은) 문제는이 응용 프로그램을 통해 데이터가 변경되지 않는다는 것입니다. 데이터베이스는 다른 응용 프로그램에서 업데이트되며이 솔루션은 cakephp 양식을 저장 한 후에 만 ​​업데이트한다고 가정합니다. – medoix

+0

@medoix - 그럴 것입니다. 당신의 질문에서 언급 할만한 가치가있는 것입니다. – Dave

1

데이터베이스가 CakePHP 외부에서 업데이트되고 컨트롤러 액션을 호출하지 않으면로드 된 모든 페이지에서 현재 값을 얻기 위해 쿼리를 만드는 것만 보입니다.

이 들어, AppController가에 beforeFilter 방법을 사용한다 :

function beforeFilter(){ 
    $user = $this->User->field('name', array('User.id' => $this->Session->read('Auth.User.id'))); 
    $this->Session->write('Auth.User', $user); 
} 

그렇지 않으면, 당신은 수시로 데이터를 가져 오기 위해 자바 스크립트와 AJAX를 사용할 수있다.

+0

그 트릭을 할 수도 있지만 치명적인 오류 : – medoix

+0

의 비 객체에 대한 멤버 함수 필드() 호출 '$ uses' 변수를 사용하여 AppController에서 사용할 모델을 포함해야합니다. http://book.cakephp.org/2.0/en/controllers.html#Controller::$uses – Alvaro