Frage

Ich versuche, eine Sub-Domain mit dem Zend-Router zu erstellen, und dann für jeden Abschnitt unter einer Sub-Domain, wie subdomain.site.com/section/ ich einen anderen Weg bin die Schaffung und dann an die Kette versuchen, es auf die Sub-Domain-Route. aber ich weiß nicht, wie. Ich habe alle Unterlagen lese ich finden konnte, und alle Foren, aber es führt mich auf meine eigene herauszufinden. Bisher meine Versuche nur erhalten mir diesen Fehler:

  

Abfangbare fatale Fehler: Argument 2 bestanden   Zend_Controller_Router_Rewrite :: addRoute () muss Schnittstelle implementieren   Zend_Controller_Router_Route_Interface, null gegeben, genannt in   /var/local/zend/library/Zend/Controller/Router/Rewrite.php on line 155   und definiert in   /var/local/zend/library/Zend/Controller/Router/Rewrite.php on line 93

mit dem folgenden Code:

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

Ich kann nicht ein Beispiel finden, wie mit einer INI-Datei überall im Netz Verkettungs dies zu tun. Die gesamte Anwendung wird für das Routing-config in einer INI geschrieben, so kann ich es nicht umschalten auf ein Array basierten config (oder XML für diese Angelegenheit), in denen 100% der Beispiele im Internet ist in.

Wenn ich es in Array-Form tun konnte, konnte ich nur sagen:

$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)

Hat jemand eine Idee, wie die oben in einer INI-Datei zu tun?

War es hilfreich?

Lösung

Hier ist im Grunde, was Sie wollen, in INI-Format:

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]+'

Dies gibt Ihnen die folgenden Routen:. b2b-signup und b2b-anotherroute

Hier einige wichtige Hinweise zur Route Verkettungs:

Wenn Routen miteinander verkettet, müssen die Parameter der äußeren Strecke eine höhere Priorität als die Parameter der inneren Route. Wenn Sie also einen Controller in den äußeren und in dem inneren Weg, die Steuerung der äußeren Route ausgewählt wird definiert werden.

Eltern / Kind gekettet Routennamen sind immer verbunden mit einem Bindestrich! So, wie in dem obigen Beispiel b2b.chains.signup wird eine Route namens b2b-signup (die Sie für die URL-Assembly verwenden können, etc).

Sie können Verkettungs halten! Ketten von Ketten-Ketten haben.

Kinder von verketteten Routen funktionieren nicht mit Wildcards. Siehe # ZF-6654 . Hier Blog-Post dass warum spricht über das mag kein großes Problem sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top