我想擴展i18n的行爲,以便它自動加入翻譯表,在任何類型的查詢(DQL,關係,getTable)上自動加入。
此外,它需要定義默認的語言參數,所以當我做一個沒有語言設置的查詢時,它會回到默認語言。
注意:我正在尋找一個通用行爲,因此適用於所有i18n模型對象,而不是爲每個類編寫和覆蓋。學說1.2自動加入i18n?
下面是一個例子:
表product
- > ID,CATEGORY_ID,價格...
表product_translation
- > ID,郎,名稱,描述...
隨着當我當前的解決方案像這樣:Doctrine_Core::getTable('Product')->findAll()
,它會獲得所有產品而不加入翻譯。
所以在控制器我有循環槽的所有記錄並重新轉換值,與$product->name = $product->Translation['en']->name
我想是這樣的:
Doctrine_Core::getTable('Product')->findAll()
它應該得到的加盟值LANG =「EN 「Doctrine_Core::getTable('Product)->findAll('en')
同上- 還應該與工作的關係,因此,例如,如果我有有許多產品
$user->Products
它應該返回集合與翻譯包括一類用戶。 - 也像
$user->Products('en')
應返回其他(非默認)語言的集合 - 神奇的功能也將是不錯(如果可能的話)......像
Doctrine_Core::getTable('Product')->getByCategoryAndLang(1,'en')
誰能幫助?我期待在模板和行爲,我認爲這是要走的路,但不知道如何實現這一
編輯:我看沒有這個太大的興趣,所以讓我嘗試用更簡單的問題。你通常如何通過關係獲得國際領域?例如,我怎樣才能撥打$user->Products
並獲得加載翻譯的產品?
謝謝,但是你的建議可以在沒有DAO的情況下完成。只需聲明ProductTable類,並添加與Translation進行連接的getXy方法。無論如何,它不能解決問題,因爲我仍然無法訪問這些字段與$ product-> name,但$ product-> Translation ['en'] - >名稱 – ZolaKt 2011-05-04 12:59:25
您不能通過'產品「模型,因爲它不在此模型中描述(並且不存在於數據庫表中)。使用我的方法您可以在一個對象(Doctrine_Collection中)中獲得所有列 - 並且可以爲一個具體的翻譯。因此循環遍歷'$ products = DAO :: get('Some \ Namespace \ Product') - > getProducts(array('lang'=> 1));'用這種方式'foreach($ products as $ product){。 ..您可** **恕我直言訪問'產品 - >名稱'。你不能嗎? – shadyyx 2011-05-04 13:44:15
嗯...我不認爲你仍然可以訪問它,就像你說的那樣,它沒有在模態中描述。我能做的就是將它水合爲數組,並重新排列結果(移除翻譯,並將名稱向上傳播一層)。這是我現在使用的。但是,仍然看不到您的方法與Table類中的正常定義方法相比有什麼不同 – ZolaKt 2011-05-04 14:21:15