Come posso scrivere catene di routing per un sottodominio in Zend Framework in un file INI di routing?
-
20-08-2019 - |
Domanda
Sto provando a creare un sottodominio utilizzando Zend Router, quindi per ogni sezione in un sottodominio, come sottodominio.site.com/section/ Sto creando un altro percorso e quindi provando a concatenarlo al percorso 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 hanno procurato questo errore:
Errore irreversibile irreversibile: Argomento 2 passato a Zend_Controller_Router_Rewrite :: addRoute () deve implementare l'interfaccia Zend_Controller_Router_Route_Interface, null dato, chiamato /var/local/zend/library/Zend/Controller/Router/Rewrite.php sulla linea 155 e definito 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 concatenarlo con un file INI in qualsiasi punto della rete. L'intera applicazione è scritta in un INI per la configurazione del routing, quindi non posso passare a una configurazione basata su array (o XML per quella materia), in cui si trova il 100% degli esempi su Internet.
Se potessi farlo in forma di array, potrei semplicemente 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?
Soluzione
Ecco praticamente quello che vuoi, 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 ti darà i seguenti percorsi: b2b-signup
e b2b-anotherroute
.
Ecco alcune note importanti sul concatenamento del percorso:
Quando si concatenano percorsi insieme, i parametri del percorso esterno hanno una priorità maggiore rispetto ai parametri del percorso interno. Pertanto, se si definisce un controllore nella rotta esterna e nella rotta interna, verrà selezionato il controllore della rotta esterna.
I nomi di percorsi concatenati padre / figlio sono sempre concatenati con un trattino! Pertanto, come nell'esempio sopra, b2b.chains.signup
diventa una route denominata <=> (che è possibile utilizzare per l'assemblaggio di URL, ecc.)
Puoi continuare a concatenarti! Le catene di catene possono avere catene.
I figli di percorsi concatenati non funzionano con i caratteri jolly. Vedi # ZF-6654 . Ecco post di blog che parla del perché questo potrebbe non essere un grosso problema.