2012-11-14 3 views
2

전적으로 데이터베이스 기반 웹 사이트가 있습니다. 나는 Zend Framwork에 익숙하지 않았으며, 라우팅이라는 개념에 대해서 많이 읽었습니다. 두뇌는 꽤 많은 스폰지이며, 여전히 이해하려고 노력하는 것들이 있습니다. 내가 할 수있을 때 ZF를 사용하여 다른 측면을 구현할 계획이지만 ZF를 주로 사용하고 있습니다. 대부분의 경우 학습 과정이므로 프레임 워크없이 직접 작성하고 싶은 몇 가지 사항이 있습니다. 여기Zend Framework 동적 라우팅

사이트가 작동해야하는 방법은 다음과 같습니다 URL이 "/"에서 아무것도 할 수 - 에, 루트 인덱스 -/예금 "/ 연락처/ 에, 루트 파일"/ "- 에 하위 디렉토리 "/ deposits/ira /"- 하위 디렉토리에있는 파일.

사용자가 링크 코드를 클릭하면 데이터베이스의 "페이지"테이블을 조사하기 위해 REQUEST_URI를 구문 분석해야합니다. 이를위한 유일한 목적은 REQUEST_URI와 일치하는 레코드의 ID를 얻는 것입니다. 그 ID는 페이지의 모든 것에 대한 핵심이며, 다른 테이블은 페이지의 다른 측면에 대한 데이터가 있는지 확인하기 위해 검사됩니다. 즉각적인 필요는 템플릿 이름입니다. 사이트는 홈 페이지, 섹션 방문 페이지 또는 섹션의 콘텐츠인지 여부에 따라 사용되는 몇 가지 다른 페이지를 갖습니다. 이 정보는 페이지가 DB에 저장 될 때 결정됩니다.

이 데이터를 가져 와서 경로를 지정하여 올바른 템플릿을 사용하고 나머지 지점을 수집하여 페이지를 완료 할 수 있기를 원합니다.

섹션 및 페이지는 언제든지 만들 수 있으므로 반환 된 템플릿 데이터를 기반으로 수행 할 작업을 처리 할 수있는 컨트롤러가 있어야합니다. 이것은 컨트롤러와 같은 사람들이 REQUEST_URI에서 전달 된 값과 관련이없는 표준화 된 이름을 필요로한다는 것을 의미합니다.

젠드에서 어떻게하면 컨트롤러가 선택되기 전에 이런 일이 일어나고 올바른 컨트롤러를 선택하기 위해 템플릿 이름 만 사용해야합니까? 당신이 할 수처럼

감사합니다, 싸이

+0

Zend Framework MVC를 사용하고 있습니까? 그렇지 않으면 자신의 Dispatcher 및 라우터를 작성해야합니다. 디스패처 및 라우터에는 자체 구성 요소가없는 이유가 있습니다. – RockyFord

답변

0

는 (적어도 프론트 엔드에 대한) 모든 당신의 경로가 동적 하는 경우 진정의 경우, 그것은 소리 :

  1. 에 부트 스트랩, 모든 기본 경로를 제거하십시오.

  2. routeStartup의 플러그인에서 REQUEST_URI을 잡고 db를 쿼리하십시오. 아마도 해당 기록에는 필요한 컨트롤러, 동작, 레이아웃 등을 파악하는 데 필요한 충분한 정보가 포함되어있을 것입니다.

    2.1 단일 경로 (REQUEST_URI와 일치) 매핑을 컨트롤러 및 동작에 추가하십시오.

    2.2 레이아웃을 필요한 레이아웃으로 설정하십시오.

정상적인 디스패치 중에 경로가 일치하고 컨트롤러/동작이 호출되며 레이아웃이 올바르게 설정됩니다.

요청이 db에 저장된 페이지와 일치하지 않으면 오류 응답/동작을 직접 호출하여 404 응답을 보내야합니다.

그러나 앱에 궁극적으로 정적 인 (즉 DB가 저장되지 않은) 경로가 있다면 (결국 상상해보아야하는) 데이터베이스에 도달하기 전에 일치해야 할 것입니다 요청한 것을 검색 할 수 있습니다. 이 일치는 통증처럼 들릴 수 있습니다 (표준 디스패처와 마찬가지로 요청 된 경로가 일치하는지 여부는 라우터 자체에 묻는 방법 일 수도 있음).

그런 경우 대체 방법은 부트 스트랩에서 표준 방식으로 모든 라우터 (비 db 저장)를 라우터에 추가 한 다음이 모든 것을 넣는 것입니다. REQUEST_URI inspection, db-searching 및 controller/404 핸들러에서 액션/레이아웃 처리. 요청 된 URL이 db의 내용과 일치하면 _forward() (리디렉션하지 않음)을 해당 컨트롤러/작업에 추가하고 위와 같이 레이아웃을 설정하십시오.

_forward()은 디스패치 루프에서 또 다른 반복을 트리거하기 때문에 아마도 가장 좋은 해결책은 아닙니다.하지만 작동 할 수있는 것처럼 보입니다.