CakePHP에서 동적 데이터베이스 구동 메뉴를 만드는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/613996

  •  03-07-2019
  •  | 
  •  

문제

데이터베이스에서 실행되는 모든 페이지에 메뉴를 표시하고 싶습니다. Just Down과 Dirty PHP를 사용하면 쉽지만 MVC 시스템을 사용하여 CakePhP와 통합하고 싶습니다. 이제 내 질문은 어떻게 가장 좋은 방법입니까?

내 생각은 레이아웃과 함께 요소를 만들고 모든 논리에 대한 구성 요소 또는 컨트롤러를 만드는 것입니다. 이것에 대한 제안이 있습니까? 아니면 도우미가 내가 사용하고 싶은 것입니까?

또한 데이터베이스의 여러 테이블에서 모든 데이터를 가져와야합니다. 하나의 모델을 통해 모든 데이터 수집 로직을 수행하는 것이 가장 좋습니까? 아니면 메뉴 컨트롤러 (또는 구성 요소)에서 대부분을하고 각 테이블의 모델을 사용합니까?

고맙습니다,

월터

도움이 되었습니까?

해결책

모델은 모델링중인 테이블에서 데이터를 가져오고 처리해야하므로 해당 모델의 각 모델에 대한 메뉴 데이터를 가져와야합니다.

구성 요소는 여러 컨트롤러가 공유하는 로직을 수용하기위한 것이므로 모든 컨트롤러가 사용하는 메뉴 구성 요소는 모델에서 메뉴 데이터를 가져오고 함께 매시하는 코드를 넣을 수있는 좋은 장소처럼 들립니다.

메뉴는 일반적으로 중첩 된 목록입니다. 메뉴의 경우에도 마크 업을 출력하는 가장 쉬운 방법은 한 번에 한 레벨을 출력하는 재귀 함수 (자체 호출)입니다. 요소, 나는 단지 메뉴 () 메소드가있는 도우미를 만들고 레이아웃에서 직접 호출합니다.

다른 팁

NeilCrooks 답변에 동의하지만 명확성을 위해 몇 가지 사항을 추가하고 싶습니다.

도우미와 요소는 도우미가 조금 더 강력 할 수 있다는 점을 제외하고는 매우 간단합니다 (적어도 제가 생각하는 방법입니다). 따라서 도우미를 사용하는 경우 즉시 모델 연관성을 바인딩하고 해제 할 수 있습니다. 이는 (일시적으로) 관련 모델에서 데이터를 가져올 수 있습니다.

개인적으로, 나는 뚱뚱한 모델과 스키니 컨트롤러를 좋아하기 때문에,이 상황에 처해 있다면 도우미를 사용하고 일시적으로 모델을 바인딩 할 것이라고 생각합니다. 기존 모델에서 가져와야하는 모든 데이터는 Model1-> FetchMenUpart (...) 유형 호출을 통해 액세스됩니다.

그런 다음 레이아웃 파일에서 헬퍼를 호출 할 수 있습니다.

왜 이것이 어디서나 문서화되지 않은 이유를 모르겠지만, 지난 밤에 방금 찾았습니다. 레이아웃 또는 요소의 변수는 ending _for_layout으로 정의해야합니다. 예 : $ this-> set ( 'category_for_layout', $ this-> category-> find ( 'all'));

AppController 클래스에서 이전 필터 메소드를 사용했습니다. 모든 페이지에서 해당 메뉴가 필요했기 때문입니다.

인터넷 에서이 것을 검색하는 동안 내가 발견 한 훌륭한 솔루션이 있습니다.

http://articles.classoutfit.com/cakephp-dynamic-navigation-bars/

메뉴의 HTML을 보유하는 요소를 만들고 레이아웃에서 메뉴를 렌더링하는 요소를 사용한다고 생각합니다.

echo $this->element('your menu');

동적으로 만들려면 메뉴 링크를 설정합니다. 컨트롤러의 배열로 메뉴 링크를 설정합니다.

여기서 좋은 기사를 찾았습니다http://www.milestree.com/webdev/cakephp/dynamic_menu

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top