2013-10-28 151 views
0

對於我的應用程序要使用子域名的設置語言,如: - site.com(英文) - de.site.com(德國) - nl.site.com(荷蘭)ZF2子域路由語言

我設置的子域的配置如下:

'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'但這似乎不起作用。

有人嗎? :)

由於提前,

尼克

+0

您可以通過其主機策略檢查SlmLocale(https://github.com/juriansluiman/SlmLocale/blob/master/docs/2.Strategies.md#host-name)。它有幾個優點,不會在路線上執行國際化,SlmLocale解決了這個問題。只有當您選擇了默認語言環境時,纔會跳過主機策略中的語言環境部分... –

回答

0

我敢打賭,你有:lang PARAM後一個點,這將不允許URL的喜歡site.com通(.site.com可能)。所以我製作了:lang可選 - 當空時應該回退到缺省值en的值。 我也沒有看到:tld param存在的任何理由,所以我把它扔了出來。這是我的猜測,你首先不需要它,因爲你提供的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路由的理解是正確的。