我正在使用语言的前缀,我不确定这是正确的方法,但我不想为每个控制器编写自定义路由。我现在有20个控制器(最简单)。
我遇到的问题是/ nl / contact和/ en / contact试图路由到nl_index()和en_index(),这对于管理路由来说很好,但所有控制器都是多语言编程并使用i18n,所以他们应该只使用index(),edit()等,而不是语言_。
如何做到这一点?我添加这些前缀的原因是我可以使用相同的控制器和函数来获取更多内容。我目前在beforeFilter中为基于url(/ en,/ nl)的前2/3字符的语言编写Configure.write语言。
答案 0 :(得分:1)
我将根据CakePHP
向您展示Croogo CMS
中的实现
here is class Router CroogoRouter
看看这一行:
Router::connect('/:locale/:controller/:action/*', array(), array('locale' => '[a-z]{3}'));
这将创建Localized routes
模式,其中locale
变量可以 3个字母的语言代码(read in ISO 639)
这意味着,如果任何已解析的路径将以3 letter code
开头,则它将被用作传递给AppController的locale
变量
然后look at this file,其中列出了这类的用法:
CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted'));
如您所见,您将一些action path
(此处为/
)与控制器和操作相关联,但CroogoRouter将负责使用:locale
变量
注意:不要忘记提及 MIT许可证,如果您要使用其代码,这是 Croogo CMS 的默认值; - )