2009-07-13 6 views
2

저는 MVC 패턴을 처음 접했으나 시도하고 싶은 CakePHP 프레임 워크의 설명서를 읽는 등의 방법으로이를 파악하려고했습니다. 그러나 이제는 어떻게 다루어야할지 잘 모르겠다는 시나리오를 발견했습니다.하나의보기 (웹 페이지)에서 여러 모델의 데이터

내가 작업하고있는 웹 사이트는 9 개의 고정 된 페이지로 구성됩니다. 즉, 다른 페이지가 존재하지 않습니다. 각 페이지에는 방명록 페이지에 방명록 메모가 들어있는 것과 같은 구체적인 내용이 들어 있습니다. 그러나 모든 페이지에는 작은 뉴스 상자와 관리자가 편집 할 수있는 간단한 팩트 상자가 있습니다. 내 관점에서 볼 때 모델은 모델로 간주되어야합니다. 소속 NewsPostController 및 ShortFactController가있는 NewsPost 및 ShortFact. 그들은 서로 전혀 관련이 없다는 것을 주목하십시오.

내 질문은 방명록 노트와 뉴스 포스트 박스 및 짧은 사실을 포함하는 단일보기 (웹 페이지)를 어떻게 만듭니 까? 수행 I : www.domain.com/guest_book를 방문하는 인덱스 작업은 최신 뉴스 게시물과를 가져올 수 있도록

  1. 는 게스트 책 (인덱스() 액션) 고유의 컨트롤러 GuestBookController 설정 임의의 짧은 사실?

  2. 정적 페이지를/pages /에 넣고 PagesController가 가져 오기를 수행하도록 하시겠습니까?

  3. < 여기에 입력하십시오. >

미리 감사드립니다.

답변

7

요소를 들여다보아야하는 것처럼 들리 겠지만 그렇지 않으면 레이아웃에이를 삽입 할 수 있습니다.하지만 내게 묻는다면 그 요소를 사용하여 깔끔하게 정리할 수 있습니다.

http://book.cakephp.org/2.0/en/views.html#elements

이 당신이 다른 뷰에 삽입 할 수있는 작은 뷰를 만들도록 할 수 있습니다.

일부 논리를 AppController에 넣어야 할 수도 있습니다 (다른 모든 컨트롤러가 앱 컨트롤러를 확장한다는 것을 기억하십시오). 이러한 뷰에 필요한 데이터를로드하십시오. beforeRender 함수는 cakephp가 제공하는 후크 함수 중 하나이므로 컨트롤러에서 정의하면 뷰가 렌더링되기 전에 작업이 완료된 후에 항상 호출됩니다. 이 같은

뭔가 당신의 AppController에 도움이 될 것입니다

function beforeRender() { 
    $this->dostuff(); 
} 

function doStuff() { 
    // do what you need to do here - eg: load some data. 
    $shortfacts = $this->ShortFact->findAll(); 
    $news = $this->NewsPost->findAll(); 
    // news and shortfacts will be available within the $shortfacts and $news variables in the view. 
    $this->set('shortfacts', $shortfacts); 
    $this->set('news', $news); 
} 

을이 doStuff 방법 내에서 사용하기위한 응용 프로그램 컨트롤러에 필요한 모델이있는 경우, 당신은 내를 정의 할 필요는 상단에 사용 AppController

class AppController { 
    var $uses = array('NewsPost', 'ShortFact'); 
} 
+0

위대한! 대단한 답변에 감사드립니다. 그 예제 코드는 머리에 못을 박았다. 나는 이것을 가능한 빨리 시도 할 것이다. 이제 침대 시간입니다. – joelpet

+0

당신이 있어야 할 곳에 당신을 데려 가기를 바랍니다. 여기에 침대 시간뿐 아니라, 당신도 유럽에있는 것 같아요! – benlumley

+0

네, 그렇습니다. 그러나 뉴스 박스와 짧은 사실을 포함하는보기 (웹 페이지)의 하위 집합 만 있다고 가정 해 봅니다. NewsPost 및 ShortFact 모델이 때로는 불필요하게로드된다는 것을 의미하지 않습니까? 어떻게 해결할 수 있니? 문제의 뷰만 확장되는 수퍼 컨트롤러 클래스? (Yep, Sweden.) – joelpet

관련 문제