【问题标题】:ZF2 Subdomain routing for languageZF2 语言子域路由
【发布时间】:2013-10-28 09:53:14
【问题描述】:

对于我的应用程序,我想利用子域来设置语言,例如: -site.com(英文) - de.site.com(德语) - nl.site.com(荷兰语)

我将子域配置设置如下:

'home' => array(
           'type' => 'hostname',
            'options' => array(
                'route' => ':lang.site.:tld',
                    'defaults' => array(
                        'controller' => 'Application\Controller\Application',
                        'action'     => 'index',
                        'lang'       => 'en',
                    ),
                    'constraints' => array(
                        'lang'     => '(|nl|de)',
                        'tld'      => '(localhost|com)',
                    ),
                ),

我面临的问题是我只想浏览英文版(site.com) 没有子域,但我遇到“找不到页面”,我以为我 ..'route' => ':lang.site.:tld'.. as '[:lang].site.:tld' 但这似乎不是上班。

有人吗? :)

提前致谢,

尼克

【问题讨论】:

  • 您可以查看 SlmLocale 及其主机策略 (github.com/juriansluiman/SlmLocale/blob/master/docs/…)。不在路由中执行 i18n 有几个优点,SlmLocale 解决了这个问题。只有当您选择了默认语言环境时,它才没有跳过主机策略中的语言环境部分的选项...

标签: routing zend-framework2 subdomain


【解决方案1】:

我敢打赌,:lang 参数后面有一个点,这将不允许像 site.com 这样的网址通过(.site.com 可能)。所以我将:lang 设为可选——它应该在为空时回退到默认的en 值。 我也没有看到 :tld 参数存在的任何理由,所以我把它扔掉了。我猜你一开始就不需要它,因为你提供了 url 示例。

   'home' => array(
        'type' => 'hostname',
        'options' => array(
        'route' => '[:lang][.]site.com', 
            'defaults' => array(
                'controller' => 'Application\Controller\Application',
                'action'     => 'index',
                'lang'       => 'en',
             ),
             'constraints' => array(
                 'lang'     => '(en|nl|de)',
             ),
    ),

出于完整性考虑,我还将en 添加到您的替代方案中,这不会影响匹配,因为只有在存在参数值时才应检查约束。

我没有时间测试它,但我认为如果我对 ZF2 路由的理解是正确的,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2014-03-30
    相关资源
    最近更新 更多