2010-03-04 6 views
3

내가 같은 URL을 가진 사이트 개발하고 있어요 때 전화 :재정의 기본 경로하지만 필요한

모두 이름 site.com/USERNAME/APPLICATION이 URL에 대한

site.com/james 
site.com/james/photos 

스키마이됩니다 응용 프로그램 이름은 db yb 프로그램 논리에서 확인합니다. 이 경로를 설정했지만 Zend는 모든 경로를이 경로로 라우팅합니다.

그러나 동일한 컨트롤러와 관리 모듈이 있습니다. 내가 site.com/admin을 방문하면 사용자 이름 "admin"을 찾습니다. 또는 site.com/james/profile로 이동하면 "프로필"이라는 응용 프로그램을 찾으려고 시도합니다. 하지만 거기에 대한 UserController있는 작업이 있습니다.

이 기능을 구현하려면 어떻게해야합니까? 예를 들어 컨트롤러의 이름을 찾고 컨트롤러가있는 경우 요청을 디스패치하는 프런트 컨트롤러입니까?

답변

2

원하는 작업을 찾을 수없는 경우 호출되는 Zend_Controller_Action __call($method, $args) 메서드를 재정의하는 방법을 살펴보십시오. site.com/USERNAME/APPLICATION 확인 로직을 기본 컨트롤러의 __call 메소드 (또는 가장 이해가되는 모든 곳)에 넣고 기본 경로를 사용하여 되돌릴 수 있습니다.

2

일반적으로 이렇게하면 'default'경로를 다시 작동시켜야합니다. 이것은 말 그대로/admin과 일치하고 admin 모듈로가는 경로를 추가하는 것을 의미합니다.

귀하의 앱이 상당히 큰 경우 곧 관리하기가 어려워집니다. URL 체계를 site.com/user/james 및 site.com/user/james/photos로 변경하면 작업을 쉽게 할 수 있습니다. 나는 콘텐츠 중심의 웹 사이트에 대한 사용

하나의 대안이 경로에 기본 컨트롤러/액션 기존 컨트롤러와 일치하지 않는 모든 요청입니다 : 기본적으로

$front->setParam('useDefaultControllerAlways', true); 

, 인 IndexController 매핑됩니다 라우팅 할 요청 : : indexAction

+0

저는 이것이 단지 일시적인 해결책이라고 생각합니다. 이를 수행 할 수있는 방법이 있어야합니다. – cnkt

+0

이것은 라우팅 작동 방식입니다. - /에서 최상위 경로를 사용하는 경우 다른 모든 경로를 복원해야합니다. 그렇지 않으면 모듈, 컨트롤러 및 작업이 있는지 확인하기 위해 맞춤 라우터와 추가 코드가 필요합니다. 또한 사용자 이름이 응용 프로그램의 모듈이나 컨트롤러와 일치하면 어떻게 할 것입니까? –

+0

"사용자 이름이 응용 프로그램의 모듈이나 컨트롤러와 일치하면 무엇을 할 것입니까?" 그것이 요점입니다. 내가 원한 것은 : "모듈과 컨트롤러를 먼저 찾는다. 모듈이나 컨트롤러를 찾지 못했다면, 사용자 이름이라고 생각하면된다. 그러나 나는 그것을 할 수 없다. – cnkt

0

route chaining을 사용하고 싶습니다. 기본 경로를 제거하고 체인의 끝에 추가하십시오.

결국 조건을 처리하기위한 프런트 컨트롤러 플러그인.

관련 문제