라우팅 INI 파일의 Zend Framework의 하위 도메인에 대한 라우팅 체인을 어떻게 작성합니까?

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

문제

Zend 라우터를 사용하여 하위 도메인을 만들려고 시도한 다음 Subdomain.site.com/section/와 같은 하위 도메인 아래 각 섹션에 대해 다른 경로를 만들고 하위 도메인 경로로 체인하려고합니다. 그러나 나는 방법을 모른다. 나는 내가 찾을 수있는 모든 문서와 모든 포럼을 읽었지만, 그것을 스스로 파악하게한다. 지금까지 내 시도로 인해이 오류가 발생합니다.

포획 가능한 치명적 오류 : 인수 2는 zend_controller_router_rewrite :: addroute ()에게 전달 된 인터페이스 zend_controller_router_route_interface, null, null, /var/local/zend/library/zend/controller/rewrite.php로 호출되어야합니다. 93 행의 /local/zend/library/zend/controller/router/rewrite.php

다음 코드로 :

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 파일로 이것을 연쇄하는 방법의 예를 찾을 수 없습니다. 전체 응용 프로그램은 라우팅 구성을 위해 INI로 작성되므로 인터넷의 예제의 100%가있는 배열 기반 구성 (또는 해당 문제에 대한 XML)으로 전환 할 수 없습니다.

배열 형식으로 할 수 있다면 다음과 같이 말할 수 있습니다.

$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 파일에서 위의 방법에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

기본적으로 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-signup, 그리고 b2b-anotherroute.

경로 체인에 대한 중요한 메모는 다음과 같습니다.

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

부모 / 자식 체인 루트 이름은 항상 대시와 연결됩니다! 위의 예에서와 같이 b2b.chains.signup 이름이 지정된 경로가됩니다 b2b-signup (URL 어셈블리 등에 사용할 수 있습니다).

당신은 계속 체인 할 수 있습니다! 사슬의 사슬에는 사슬이있을 수 있습니다.

사슬의 어린이는 와일드 카드와 함께 작동하지 않습니다. 보다 #ZF-6654. 여기에 있습니다 블로그 게시물 그것은 왜 그것이 큰 문제가되지 않을지에 대해 이야기합니다.

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