Cakephp查找('list')和Translate行为

时间:2015-08-06 09:34:14

标签: cakephp cakephp-3.0

我正在使用CakePHP 3。

我有一个帐户表。每个帐户属于一个国家/地区。使用翻译行为将国家/地区表国际化,因此它可以存储每种语言的国家/地区名称。

     class CountriesTable extends Table
     {
        public function initialize(array $config)
        {
        $this->table('countries');
        $this->displayField('name');
        $this->primaryKey('id');
        $this->addBehavior('Translate', ['fields' => ['name']]);
        }

请注意,“name”字段通过Translate行为进行国际化,因此它不存在于countries表中。

然后在AccountsController中,我想获取使用活动语言的国家/地区列表:

....
$countries = $this->Accounts->Countries->find('list', ['limit' => 200]);
.....

问题在于它没有按预期从 i18n 表中获取翻译。我已经为国际化国家/地区表编写了维护操作,一切正常,但是这个简单的find('list')无效。

还有一个细节:在Mysql日志中我看到它启动了这个查询。请注意,countries表格只有两个字段: id 代码,但 displayField 名称

SELECT Countries.id AS `Countries__id`, Countries.code AS `Countries__code` FROM countries Countries LIMIT 200
顺便说一句,从2.x切换到3.x变得非常困难。

1 个答案:

答案 0 :(得分:1)

经过大量调查后我发现了这个问题。如果是我的情况,账户表不是国际化的,而是相关的表国家。

问题是我没有在Accounts控制器中设置区域设置。将这一行放在发现之前,一切正常:

I18n::locale('spa');

所以我想如果你不使用 I18n 来坚持语言环境,翻译行为根本不起作用。我应该在 AppController 中加载它以使其在应用程序范围内可用。

非常感谢你的帮助!!