CakePHP 3.3 表专用于基于所选语言的不同数据



我有一个非标准的问题要问CakePHP 3.3。假设在我的数据库中,我有两个表:AB(两者都是相同的,第一个专用于第一种语言的数据,第二个专用于第二种语言的数据)。

我正确地为表格A编写了整个网站(表格B尚未使用)。此外,我实现了.po文件机制来切换界面的语言。界面的语言切换正确。

我怎样才能轻松地插入表格B- 我不想在所有情况下都做IF-ELSE陈述,因为网站越来越大,而且表 A 中已经包含了许多操作。如果选择语言pl_PL进行en_US(通过.po文件),是否有可能以某种方式进行表A等于表B的简单映射?

我想到的最简单的选择是将当前语言环境注入到现有的表类中,并让它相应地设置数据库表名称。

假设您现有的表类将被称为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);
// ...
}
// ...
}

在您的应用程序代码涉及模型层之前,当然在它设置区域设置之后(例如,可能在引导程序中),配置您在整个应用程序中使用的别名(对于此示例,我们假设别名与表名匹配):

CakeORMTableRegistry::config('SomeShared', [
'locale' => CakeI18nI18n::locale()
]);

鉴于语言环境可能由于某种原因而无法进入类,您应该实施一些安全措施,我刚刚添加了基本isset()检查以用于示例目的。鉴于错误配置的表类可能会导致相当多的问题,您可能希望添加一些更复杂的检查。

最新更新