【问题标题】:how to set default prefix for routing in CakePHP 3?如何在 CakePHP 3 中为路由设置默认前缀?
【发布时间】:2011-11-14 16:21:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: php cakephp cakephp-3.0


    【解决方案1】:

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

    here is class CroogoRouter Router

    看看这一行:

    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 变量处理此路径的本地化

    注意:如果您打算使用 Croogo CMS 的代码,请不要忘记提及 MIT 许可证 ;-)

    【讨论】:

    • 小世界。 5 个月前,我在您的网站上看到了多种语言的良好实施,甚至为此添加了书签。我使用 Croogo 3 个月,但停止使用它。我会按照你说的方式尝试实现 Croogo 路由器。
    • 如果我是你,我更愿意从 Croogo CMS 类 CroogoRouter 中汲取灵感,并根据自己的需求进行自己的实现。但无论如何,小世界,你是对的。)
    猜你喜欢
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2016-10-18
    • 2015-08-14
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多