2014-09-29 36 views
0

自動定位請看下面的代碼:在Symfony2中

public function __construct($error_code) 
{ 
    $translator = new Translator('en'); 
    $translator->addLoader('yaml', new YamlFileLoader()); 
    $translator->addResource('yaml', dirname(__DIR__).'/Resources/translations/messages.en.yml', 'en'); 
    $this->setErrorCode($translator->trans($error_code)); 
} 

我是新來的symfony。我創建了一個擴展了Exception的類MyProjectExceptions。現在,當我必須拋出一個自定義的異常時,我將這個類稱爲$ error_code。現在這個$ error_code是另一個類的常量,它的語言環境位於MyBundle/Resources/transalations/messages.en.yml中,用於拋出異常消息。

現在我的問題是以下幾點:

  • 我怎樣才能避免addResource,因此它可以自動添加基於區域設置和查找的字符串?
  • 如何訪問此類中的serviceContainer,以便我可以訪問會話來設置和獲取語言環境或其他服務。
  • 我們是否也可以設置默認的Loader。

在上面的代碼中,我創建了一個Translator類的實例並手動傳遞'en'。但它應該選擇默認的區域設置或用戶設置的區域設置。 我嘗試了很多解決方案,但無法獲得理想的結果。

任何幫助,將不勝感激。提前致謝。

回答

-1

您需要將您的課程註冊爲Symfony服務。閱讀文檔:http://symfony.com/doc/current/book/service_container.html#creating-configuring-services-in-the-container

之後,您可以在構造函數中注入其他服務(如Translation)。它將使用您已經設置的所有參數。

如果您注入翻譯服務,它將選擇您已經設置的參數。例如,如果您爲config.yml定義了翻譯器參數(包括默認語言環境),那麼您將覆蓋此路徑中參數的此語言環境,則將使用此語言環境設置翻譯器服務。它會自動使用適當目錄中的資源。

+1

感謝您的回答。但它只有部分回答。我的主要問題是我不想手動添加資源。我希望它根據用戶區域設置自動提取。 – user3170450 2014-09-30 06:02:28

+0

如果您注入翻譯服務,它將選擇您已經設置的參數。例如,如果您在config.yml中爲轉換器定義了參數(包括默認語言環境),那麼您在路徑中用參數覆蓋了此語言環境,則您將獲得具有此語言環境的翻譯器服務。它會自動使用適當目錄中的資源。 – 2014-09-30 07:13:30

+0

現在我明白了。萬分感謝 :) – user3170450 2014-09-30 09:27:39