我对CakePHP 3.3有一个非标准的问题。让我们假设在我的数据库中我有两个表:A
和B
(两者都相同,第一个专用于第一语言的数据,第二个专用于第二语言的数据)。
我正确编码了整个网站A
(表B
尚未使用)。另外,我实现了.po
文件mechanizm来切换接口的语言。接口的语言正确切换。
如何轻松插入表B
- 我不想在所有情况下都发出IF-ELSE
语句,因为网站变得越来越大,并且表A中已经包含了许多操作。如果A
选择语言B
(通过pl_PL
文件),是否有可能以某种方式制作表en_US
等于表.po
的简单映射?< / p>
答案 0 :(得分:1)
我想到的最简单的选择是将当前的语言环境注入现有的表类,并相应地设置数据库表名。
假设您的现有表类将被称为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);
// ...
}
// ...
}
在您的appplication代码涉及模型层之前,在设置了当前的语言环境(例如可能在您的引导程序中)之后,配置您在整个应用程序中使用的别名(对于此示例,我们假设别名与表名匹配):
\Cake\ORM\TableRegistry::config('SomeShared', [
'locale' => \Cake\I18n\I18n::locale()
]);
鉴于区域设置可能因某种原因无法进入课堂,您应该实施一些安全措施,我刚刚添加了基本的isset()
检查以用于示例目的。鉴于错误配置的表类可能会导致一些问题,您可能希望添加一些更复杂的检查。