2011-12-03 7 views
2

저는 인터넷에서 Zend_Locale과 Zend_Translate를 모듈화 된 구조로 통합하는 좋은 해결책을 모색했습니다. 모듈로 Zend_Locale과 Zend_Translate 구현하기

http://url/:lang/:module/:controller/:action
http://url/:lang/:controller/:action
http://url/:module/:controller/:action <

= 로케일에게 라우터를 사용하는 튜토리얼의

내가 본 많은 기본에 의존해야하지만, 아무도 나를 위해 제대로 작동하지 : 여기에 내가 원하는 endpath입니다. 누군가 나를 위해이 문제를 해결할 수 있습니까?

감사합니다.

답변

0

첫 번째 문제는 경로를 사용할 때 규칙을 여러 변수와 일치시키기 위해 매우 특정한 제약 조건이 필요하다는 것입니다.

// url/: lang/: module/: controller/: action 및 // url/: module/: controller/: action 첫 번째 구조 만 사용하도록 설정합니다. 이렇게하면 첫 번째 규칙을 // url/: lang/: controller/: 액션에서 분리하는 것이 더 쉬울 것이며 각 규칙에는 서로 다른 "단어"(URL 부분)가있는 규칙이 두 개뿐입니다. (ZF 그 정보를 필요로하기 때문에) 두 번째 경로에서 모듈을 기본하면서, 두 번째위한 URL과 일치하지 않도록

$withModule = new Zend_Controller_Router_Route(
    ':lang/:module/:controller/:action', 
    array() 
); 

$withoutModule = new Zend_Controller_Router_Route(
    ':lang/:controller/:action', 
    array(
     'module' => 'default' 
    ) 
); 

$router->addRoute('withModule', $withModule); 
$router->addRoute('withoutModule', $withoutModule); 

첫 번째 경로에서 당신은 어떤 기본값을 지정하지 마십시오.

if(!$this->_getParam('lang')) { 
    //this should cover the 3rd use case 
    $this->_redirect('/en/' + $this->view->url(), array('exit' => true, 'prependBase' => false)); 
} else { 
    //setup Zend_Translate 
} 

다른 가능성 : 제 규칙으로서

, 난 언어 PARAM 아래의 예에서와 같이 수신되는지 확인 MyLib_Controller 추천 및 초기화() 메소드에서 기지국 상위 제어기 것을 사용 제안 : lang 변수를 2 글자 단어로 제한하고 있지만 문제가 생길 수 있으므로이를 피하는 것이 더 좋습니다.