如何在CakePHP 3中设置路由的默认前缀


how to set default prefix for routing in CakePHP 3?

我使用语言前缀,我不确定这是正确的方式,但我不想为我的每个控制器编写自定义路由。我现在有20个控制器(最简单的)。

我有/nl/contact和/en/contact试图路由到nl_index()和en_index()的问题,这对于管理路由很好,但所有控制器都是多语言编程并使用i18n,所以他们应该只使用index(), edit()等,而不是在它前面的language_。

如何做到这一点?我添加这些前缀的原因是,我可以使用相同的控制器和功能的更多内容。我目前正在编写Configure。根据url (/en,/nl)的前2/3个字符在beforeFilter中编写语言

我将介绍基于CakePHP的Croogo CMS实现

这里是class CroogoRouter Router

看这一行:

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的默认值;-)