2009-06-27 5 views
5

J'essaye de créer un sous-domaine en utilisant le Zend Router, et puis pour chaque section sous un sous-domaine, tel que subdomain.site.com/section/, je crée une autre route et essaye ensuite de la chaîner à la route de sous-domaine. mais je ne sais pas comment. J'ai lu toute la documentation que j'ai pu trouver et tous les forums, mais cela m'amène à me débrouiller tout seul. Jusqu'à présent, mes tentatives me obtenir cette erreur:Comment écrire des chaînes de routage pour un sous-domaine dans Zend Framework dans un fichier INI de routage?

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

avec le code suivant:

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 

Je ne peux pas trouver un exemple de la façon de faire enchaînant cela avec un fichier INI partout sur le net. L'application entière est écrite dans une INI pour la config de routage, donc je ne peux pas la passer à une configuration basée sur une matrice (ou XML), dans laquelle 100% des exemples sur Internet sont po

Si je pouvais le faire sous forme de tableau, je pouvais dire ceci:

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

Est-ce que quelqu'un a des idées sur la façon de faire ce qui précède dans un fichier INI?

Répondre

11

est ici essentiellement ce que vous voulez, au format 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]+' 

Cela vous donnera les itinéraires suivants: b2b-signup et b2b-anotherroute.

Voici quelques remarques importantes sur Enchaînement d'itinéraire:

Lorsque enchaînant les routes ensemble, les paramètres de la voie externe ont une priorité plus élevée que les paramètres de la route intérieure. Ainsi, si vous définissez un contrôleur dans les routes externe et interne, le contrôleur de la route externe sera sélectionné.

Les noms de route chaînés parent/enfant sont toujours concaténés avec un tiret! Ainsi, comme dans l'exemple ci-dessus, b2b.chains.signup devient un itinéraire nommé b2b-signup (que vous pouvez utiliser pour l'assemblage d'URL, etc.).

Vous pouvez continuer à enchaîner! Les chaînes de chaînes peuvent avoir des chaînes.

Les enfants des itinéraires chaînés ne fonctionnent pas avec les caractères génériques. Voir #ZF-6654. Voici blog post qui explique pourquoi ce n'est peut-être pas un gros problème.

+0

C'est exactement la réponse que je cherchais. Vous m'avez vraiment aidé depuis que je viens de commencer à travailler avec la ZF il y a quelques mois et il n'y a littéralement rien sur Internet que j'ai pu trouver (je suppose jusqu'à présent) qui décrivait comment faire cela dans l'INI. Merci beaucoup! Pouvez-vous recommander de bons livres pour ZF? – Dan

+1

Non, malheureusement. Je n'ai jamais lu aucun livre (ou livre?) Sur le Zend Framework. Cela dit, Zend Framework in Action de Rob Allen http://www.zendframeworkinaction.com/ est supposé être bon. Cependant, en raison de la rapidité du développement avec ZF, les livres deviennent rapidement obsolètes; très vite. Par exemple, rien dans les chaînes de routage, Zend_Application ou Zend_Tool ne figurerait dans ce livre. – jason

+0

"Vous pouvez continuer à enchaîner! Chaînes de chaînes peuvent avoir des chaînes." Je me demandais que l'on est dans le bon sens: 1. routes.b2b.chains.anotherroute.chains.yetanotherroute ... 2. routes.anotherroute.chains.yetanotherroute ... –