Come impostare il prefisso predefinito per il routing in CakePhp 3?
-
28-10-2019 - |
Domanda
Sto usando i prefissi per le lingue, non sono sicuro che questo sia il modo giusto, ma non voglio scrivere percorsi personalizzati per ciascuno dei miei controller. Ormai ho 20 controller (il più semplice).
Ho il problema che /nl /contatto e /en /contatto stanno cercando di instradare a nl_index () e en_index (), il che va bene per il routing di amministrazione, ma tutti i controller sono stati programmati multi-lingualmente e usando i18n, quindi dovrebbero usare Just Index (), Edit (), ecc. E non lingua_ di fronte.
Come si può fare? Il motivo per cui ho aggiunto questi prefissi è che posso usare lo stesso controller e le funzioni per più contenuti. Attualmente sto scrivendo configure.write la lingua in prima difilter per le lingue in base ai primi 2/3 caratteri dell'URL (/en,/nl).
Soluzione
Ti presenterò l'implementazione in Croogo CMS
Basato su CakePhp
Ecco la classe Router CroogoRouter
Guarda questa riga:
Router::connect('/:locale/:controller/:action/*', array(), array('locale' => '[a-z]{3}'));
Questo creerà Localized routes
pattern, dove locale
la variabile può essere Codice linguistico a 3 lettere (Leggi in ISO 639)
Ciò significa, se inizierà uno qualsiasi del percorso analizzato 3 letter code
Sarà usato come locale
variabile passata ad AppController
Quindi Guarda questo file, dove viene presentato l'uso di tale classe:
CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted'));
Come puoi vedere, ne collegherai alcuni action path
(qui /
) a controller e azione, ma Croogrouter si occuperà di localizzare questo percorso con :locale
variabile
Nota: non dimenticare di menzionare Licenza MIT, che è predefinito per CROOGO CMS Se hai intenzione di usare il suo codice ;-)