2009-06-27 4 views
5

Sto provando a creare un sottodominio usando Zend Router, e poi per ogni sezione in un sottodominio, come sottodominio.site.com/section/ Sto creando un altro percorso e poi provando a collegarlo alla rotta del sottodominio. ma non so come. Ho letto tutta la documentazione che ho trovato e tutti i forum, ma mi porta a capirlo da solo. Finora, i miei tentativi mi ottenere questo errore:Come si scrivono le catene di instradamento per un sottodominio in Zend Framework in un file INI di routing?

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

con il seguente codice:

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 

non riesco a trovare un esempio di come fare il concatenamento questo con un file INI qualsiasi punto della rete. L'intera applicazione è scritta in un INI per la configurazione di routing, quindi non posso passare a una configurazione basata su array (o XML per quella materia), in cui sono presenti il ​​100% degli esempi su Internet.

Se potessi farlo in forma matrice, ho potuto solo dire questo:

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

qualcuno ha qualche idea su come fare quanto sopra in un file INI?

risposta

11

Ecco in pratica ciò che si desidera, in formato 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]+' 

questo vi darà i seguenti itinerari: b2b-signup e b2b-anotherroute.

Ecco alcune note importanti sulla rotta concatenamento:

Quando concatenamento percorsi insieme, i parametri del percorso esterno hanno una priorità maggiore rispetto ai parametri del percorso interno. Pertanto, se si definisce un controllore nel percorso esterno e interno, verrà selezionato il controllore del percorso esterno.

I nomi di percorso concatenato/figlio sono sempre concatenati con un trattino! Quindi, come nell'esempio sopra, b2b.chains.signup diventa una route denominata b2b-signup (che è possibile utilizzare per l'assemblaggio di URL, ecc.).

È possibile continuare a concatenare! Le catene di catene possono avere catene.

I bambini di percorsi concatenati non funzionano con i caratteri jolly. Vedi #ZF-6654. Ecco blog post che parla del motivo per cui potrebbe non essere un grosso problema.

+0

Questa è esattamente la risposta che stavo cercando. Mi hai davvero aiutato da quando ho iniziato a lavorare con la ZF qualche mese fa e non c'è letteralmente niente su internet che potrei trovare (immagino fino a questo post) che descriva come farlo nell'ini. Grazie mille! Puoi consigliare qualche buon libro per ZF? – Dan

+1

No, purtroppo. Non ho mai letto nessuno dei libri (o dei libri?) Su Zend Framework. Detto questo, Zend Framework in Action di Rob Allen http://www.zendframeworkinaction.com/ dovrebbe essere buono. Tuttavia, a causa del ritmo veloce con cui lo sviluppo avviene con ZF, i libri diventano obsoleti velocemente; molto veloce. Ad esempio, nulla su catene di percorso, Zend_Application o Zend_Tool si troverebbe in quel libro. – jason

+0

"Puoi continuare a incatenare! Le catene di catene possono avere catene." Mi chiedevo quale sia il modo corretto: 1. routes.b2b.chains.anotherroute.chains.yetanotherroute ... 2. routes.anotherroute.chains.yetanotherroute ... –