2009-06-27 7 views
5

젠드 라우터를 사용하여 하위 도메인을 만들고 하위 도메인 아래의 각 섹션 (예 : subdomain.site.com/section/)을 만들려고합니다. 다른 경로를 만들고 하위 도메인 경로에 연결하려고합니다. 하지만 어떻게해야할지 모르겠다. 내가 찾을 수있는 모든 문서와 모든 포럼을 읽었지만 혼자서 알아낼 수 있습니다. 다음 코드로라우팅 INI 파일에서 Zend Framework의 하위 도메인에 대한 라우팅 체인을 작성하려면 어떻게해야합니까?

Catchable fatal error: Argument 2 passed to Zend_Controller_Router_Rewrite::addRoute() must implement interface Zend_Controller_Router_Route_Interface, null given, called in /var/local/zend/library/Zend/Controller/Router/Rewrite.php on line 155 and defined in /var/local/zend/library/Zend/Controller/Router/Rewrite.php on line 93

: 난 아무데도 그물에 INI 파일을 사용하여이 체인을 수행하는 방법의 예를 찾을 수 없습니다

routes.b2b.type = "Zend_Controller_Router_Route_Hostname" 
routes.b2b.route = "sales.sitename.com" 
routes.b2b.defaults.module = b2b 
routes.b2b.defaults.controller = index 
routes.b2b.defaults.action = index 

routes.b2b_signup.type = "Zend_Controller_Router_Route_Static" 
routes.b2b_signup.route = "/signup" 
routes.b2b_signup.defaults.controller = "index" 
routes.b2b_signup.defaults.action = "signup" 

routes.b2b_login.type = "Zend_Controller_Router_Route_Chain" 
routes.b2b_login.chain = b2b_signup 

지금까지 내 시도는 나에게이 오류가 발생합니다. 전체 응용 프로그램은 라우팅 구성에 대해 INI로 작성되므로 배열 기반 config (또는 그 문제에 대해서는 XML)로 전환 할 수 없습니다. 인터넷의 예제는 100 %입니다.

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    'sales.sitename.com', 
    array(
     'controller' => 'index', 
     'module'  => 'b2b', 
     'action'  => 'index' 
    ) 
); 

$hostnameRoute = new Zend_Controller_Router_Route_Static(
    '/signup', 
    array(
     'controller' => 'index', 
     'module'  => 'b2b', 
     'action'  => 'signup' 
    ) 
); 
    $chainedRoute = new Zend_Controller_Router_Route_Chain(); 
    $chainedRoute->chain($b2b_signup) 

사람은 INI 파일에 위의 작업을 수행하는 방법에 대한 아이디어가 있습니까 : 나는 배열 형태로 그것을 할 수

경우, 난 그냥이 말을 수 있을까?

답변

11

다음은 INI 형식으로, 당신이 원하는 기본적이다 :

routes.b2b.type = "Zend_Controller_Router_Route_Hostname" 
routes.b2b.route = "sales.sitename.com" 
; you could specify a default module (or anything) to use for the whole 
; route chain here, like so: 
; routes.b2b.defaults.module = "default" 

routes.b2b.chains.signup.type = "Zend_Controller_Router_Route_Static" 
routes.b2b.chains.signup.route = "/signup" 
routes.b2b.chains.signup.defaults.controller = "index" 
routes.b2b.chains.signup.defaults.action = "signup" 

routes.b2b.chains.anotherroute.route = "/something/:foo" ; etc, etc. 
routes.b2b.chains.anotherroute.defaults.action = "foo" 
routes.b2b.chains.anotherroute.defaults.controller = "index" 
routes.b2b.chains.anotherroute.defaults.foo = "bar" 
routes.b2b.chains.anotherroute.reqs.foo = '[a-z]+' 

이 당신에게 다음과 같은 경로를 줄 것이다 : b2b-signupb2b-anotherroute을.

여기에 경로 체인에 몇 가지 중요한 사항을이다 : 함께 경로를 체인하는 경우

은 외부 경로의 매개 변수는 내부 경로의 매개 변수보다 우선 순위가 높습니다. 따라서 외부 및 내부 경로에 컨트롤러를 정의하면 외부 경로의 컨트롤러가 선택됩니다.

상위/하위 연결 경로 이름은 항상 대시로 연결됩니다! 따라서 위의 예와 마찬가지로 b2b.chains.signupb2b-signup (URL 어셈블리 등을 위해 사용할 수있는 경로)이됩니다.

계속 연결할 수 있습니다! 체인의 체인은 체인을 가질 수 있습니다.

체인 경로의 하위 항목은 와일드 카드로 작동하지 않습니다. #ZF-6654을 참조하십시오. 여기에 왜 큰 문제가되지 않을지에 대해 말하는 blog post가 있습니다.

+0

정확히 내가 원하는 답변입니다. 몇 달 전 ZF와 함께 일하기 시작한 이래로 정말로 도움이되었습니다. INI에서이 작업을 수행하는 방법을 설명하는 인터넷에서 나는이 게시물까지 찾을 수 있습니다. 고마워요! ZF에 좋은 책을 권할 수 있습니까? – Dan

+1

아니요, 슬프게도. Zend Framework에 대한 책 (또는 책?)을 읽은 적이 한번도 없습니다. 즉, Rob Allen의 Zend Framework in Action http://www.zendframeworkinaction.com/이 좋다고합니다. 그러나 ZF로 개발이 진행되는 속도가 빠르기 때문에 책은 빨리 구식이됩니다. 매우 빠릅니다. 예를 들어 루트 체인, Zend_Application 또는 Zend_Tool에 관한 정보는 해당 도서에 포함되지 않습니다. – jason

+0

"계속 체인을 유지할 수 있습니다! 체인 체인은 체인을 가질 수 있습니다." 1. routes.b2b.chains.anotherroute.chains.yetanotherroute ... 2 routes.anotherroute.chains.yetanotherroute ... –