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

Était-ce utile?

La solution

Je vais vous présenter l'implémentation en Croogo CMS basé sur CakePHP

voici la classe CroogoRouter Routeur

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top