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

如何在CakePHP 3中设置路由的默认前缀?,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我正在为语言使用前缀,我不确定这是否正确,但我不想为我的每个控制器编写自定义路由。我现在有20个控制器(最简单) 我有一个问题,/nl/contact和/en/contact正在尝试路由到nl_index()和en_index(),这对于管理员路由很好,但是所有控制器都是多语言编程的,并且使用i18n,所以它们应该只使用index()、edit()等,而不是前面的语言 如何做到这一点?我添加这些前缀的原因是我可以对更多内容使用相同的控制器和函数。我目前正在根据url的前2/3个字符(/en,/n

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

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


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

我将在基于CakePHP的
Croogo CMS
中向您介绍实现

请看这一行:

Router::connect('/:locale/:controller/:action/*', array(), array('locale' => '[a-z]{3}'));
这将创建
本地化路由
模式,其中
区域设置
变量可以是3个字母的语言代码()

这意味着,如果任何解析路径以
3个字母的code
开头,它将被用作传递给AppController的
locale
变量

然后,在何处显示该类的用法:

CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted'));
如您所见,您将把一些
操作路径
(此处
/
)连接到控制器和操作,但CroogoRouter将负责使用
:locale
变量本地化此路径


注意:不要忘了提及MIT许可证,这是Croogo CMS的默认许可证,如果您要使用其代码;-)

小世界。5个月前,我在你的网站上看到了多种语言的良好实现,甚至为此将其加入了书签。我用了3个月的Croogo,但还是停止了使用。我将尝试按照您所说的方式实现Croogo路由器。如果我是您,我更愿意从Croogo CMS类CroogoRouter中汲取灵感,并根据您的需要自行实现。但无论如何,小世界,你是对的。)