Come posso scrivere catene di routing per un sottodominio in Zend Framework in un file INI di routing?

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

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top