我想到的最簡單的選擇是將當前語言環境注入到現有表類中,並相應地設置數據庫表名。
假設您現有的表類將被稱爲SomeSharedTable
,這可以看的線沿線的東西:
// ...
class SomeSharedTable extends Table
{
public function initialize(array $config)
{
if (!isset($config['locale'])) {
throw new \InvalidArgumentException('The `locale` config key is missing');
}
$table = 'en_table';
if ($config['locale'] === 'pl_PL') {
$table = 'pl_table';
}
$this->table($table);
// ...
}
// ...
}
而在此之前你參加辦法代碼涉及到模型層,並將其設置課程的語言環境後(這可能是例如在引導文件),配置您正在使用在整個應用程序的別名(在這個例子中,我們假設別名表名相匹配):
\Cake\ORM\TableRegistry::config('SomeShared', [
'locale' => \Cake\I18n\I18n::locale()
]);
由於它有可能是祿因爲任何原因,阿爾特可能不會進入班級,你應該實施一些安全措施,我剛剛添加了基本的isset()
檢查爲例。鑑於錯誤配置的表類可能會導致相當多的問題,您可能需要添加一些稍微複雜的檢查。
來源
2017-03-16 20:49:45
ndm
我想到的第一個問題是「_why_」?爲什麼會這樣做,而不是使用[**翻譯行爲**](https://book.cakephp.org/3.0/en/orm/behaviors/translate.html)? – ndm
感謝您的回覆,但我無法使用此解決方案,因爲表格由外部程序填寫。例如A和B分別用英文和波蘭語填寫數據,如果用戶在我看到的網站 – Annabelle
上進行操作,我應該在C(en)和D(pl)中添加數據,因此您正在使用遺留數據庫。 – ndm