我使用语言前缀,我不确定这是正确的方式,但我不想为我的每个控制器编写自定义路由。我现在有20个控制器(最简单的)。
我有/nl/contact和/en/contact试图路由到nl_index()和en_index()的问题,这对于管理路由很好,但所有控制器都是多语言编程并使用i18n,所以他们应该只使用index(), edit()等,而不是在它前面的language_。
如何做到这一点?我添加这些前缀的原因是,我可以使用相同的控制器和功能的更多内容。我目前正在编写Configure。根据url (/en,/nl)的前2/3个字符在beforeFilter中编写语言
我将介绍基于CakePHP的Croogo CMS
实现
这里是class Router CroogoRouter
看这一行:
Router::connect('/:locale/:controller/:action/*', array(), array('locale' => '[a-z]{3}'));
这将创建Localized routes
模式,其中locale
变量可以是3字母语言代码(在ISO 639中读取)
这意味着,如果任何解析的路径将以3 letter code
开始,它将被用作locale
变量传递给AppController
然后看看这个文件,这里展示了类的用法:
CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted'));
正如您所看到的,您将连接一些action path
(这里是/
)到控制器和动作,但是CroogoRouter将负责用:locale
变量
注意:不要忘记提到MIT许可证,如果您要使用其代码,这是Croogo CMS的默认值;-)