2012-05-08 2 views
4

인증 구성 요소를 사용하고 있습니다. 정상적으로 작동합니다. 하지만 내 기본 레이아웃에서 사용자가 로그인 한 경우 다른 메뉴가 있습니다. 사용자가 로그인했는지 여부를 확인하고 싶습니다. 일반적으로 $ this-> Auth-> user ('id')하지만 $ this-> Auth는 레이아웃에서 작동하지 않습니다 (컨트롤러가 Auth 구성 요소를 사용하는보기에서만 작동합니다).케이크에 PHP를 사용하고 레이아웃에서 인증을 사용합니다.

어떻게 만드시겠습니까?

beforeRender에서

답변

6

세션에서 인증 데이터를 읽을 수 있습니다. 뭔가 같이 :

$user = $session->read('Auth'); 

단`t는 당신의 AppController에 세션 도우미를 추가하는 것을 잊지.

var $helpers = array('Session'); 
+2

이것은 제가 제공 한 것보다 덜 건조한 솔루션입니다. 필요할 때마다 $ this-> Session-> read()를 호출하고 헬퍼를 로딩해야한다. – burzum

+0

그가 레이아웃에 대해 물어 본 이유는 그가 어디서나 게시하고 싶어한다는 사실이었습니다. –

+0

레이아웃은 뷰와 같습니다 ... 뷰 (클래스)로 설정된 모든 것이 레이아웃에서도 사용 가능합니다. – burzum

12

() 단지

$this->set('userData', $this->Auth->user()); 

를 호출하고보기에 데이터를 설정하고보기에서 확인을한다.

레이아웃에서 데이터를 가져 오려면 AppController에서 beforeRender() 메서드를 호출해야합니다.

세션을 통해 전달하는 것은 좋은 생각이 아닙니다. 일반적인 경우는 아니지만 적어도 솔리드 작업을 선호합니다. 세션을 사용하는 경우 세션을 사용하지 않는 시스템에서 코드가 실패합니다 (stateless auth). 전반적으로 볼 때 세션에 액세스하는 것을 크게 좋아하지는 않습니다. 세션은 데이터 소스와 비슷합니다.

+0

하지만보기에는 레이아웃이 필요합니다. 레이아웃 doesnt는 내가 beforeRender를 넣을 수있는 컨트롤러를 가지고 있습니다 ... – user606521

+5

분명히 CakePHP 또는 MVC가 어떻게 작동하는지 모르십니까? 그러면 뷰에 데이터가 설정되고 모든 레이아웃에서이 데이터를 사용할 수있게됩니다. 레이아웃은 실제로보기의 일부입니다. 레이아웃은 뷰와 동일한 방식으로 렌더링되고, 뷰는 레이아웃 내부에서 렌더링됩니다. 또한 누군가에게 작동하지 않는다고 말하기 전에 코드를 사용해 보라고 제안합니다. – burzum

관련 문제