comment définir le préfixe par défaut pour le routage dans CakePHP 3?
-
28-10-2019 - |
Question
J'utilise des préfixes pour les langues, je ne suis pas sûr que ce soit la bonne façon, mais je ne veux pas écrire de routes personnalisées pour chacun de mes contrôleurs.J'ai 20 contrôleurs maintenant (le plus simple).
J'ai le problème que / nl / contact et / en / contact essaient de router vers nl_index () et en_index (), ce qui est bien pour le routage administrateur, mais tous les contrôleurs ont été programmés en plusieurs langues et en utilisant i18n, doncils doivent utiliser simplement index (), edit (), etc. et non language_ devant.
Comment cela peut-il être fait?La raison pour laquelle j'ai ajouté ces préfixes est que je peux utiliser le même contrôleur et les mêmes fonctions pour plus de contenu.J'écris actuellement la langue Configure.write dans beforeFilter pour les langues basées sur les 2/3 premiers caractères de l'url (/ en, / nl).
La solution
Je vais vous présenter l'implémentation en Croogo CMS
basé sur CakePHP
voici la classe Routeur CroogoRouter
regardez cette ligne:
Router::connect('/:locale/:controller/:action/*', array(), array('locale' => '[a-z]{3}'));
Cela créera un modèle Localized routes
, où la variable locale
peut être un code de langue à 3 lettres ( lu dans ISO 639 )
cela signifie que si l'un des chemins analysés commence par 3 letter code
, il sera utilisé comme variable locale
transmise à AppController
Ensuite, regardez ce fichier , où est présenté l'utilisation d'une telle classe:
CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted'));
comme vous pouvez le voir, vous allez connecter un action path
(ici /
) au contrôleur et à l'action, mais CroogoRouter se chargera de localiser ce chemin avec la variable :locale
Remarque: n'oubliez pas de mentionner la licence MIT , qui est par défaut pour Croogo CMS si vous comptez utiliser son code ;-)