0

对于我的应用程序,我想利用子域来设置语言,例如:-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' 但这似乎不起作用。

任何人?:)

提前致谢,

缺口

4

1 回答 1

0

我敢打赌,您在:lang参数后面有一个点,并且不允许 url 像site.compass(.site.com可能)。所以我做了:lang可选的——它应该在为空时回退到默认en值。我也没有看到:tldparam 存在的任何理由,所以我把它扔掉了。我猜您一开始就不需要它,因为您提供了 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 路由的理解是正确的,它应该可以工作。

于 2013-10-29T07:52:41.427 回答