TranslateBehavior不会在默认语言环境中使用默认字段

时间:2017-03-15 02:54:37

标签: internationalization cakephp-3.0 behavior

我正在使用CakePHP 3.4,并且我将它用于双语网站,其中西班牙语(es)是默认语言环境。我有MangasTable为字段TranslateBehavior实现了slug,我试图查询它,如下所示:

$manga = $this->Mangas->find()
    ->select([
        'id',
        'nombre'
    ])
    ->where([$this->Mangas->translationField('slug') => $slug])
    ->firstOrFail();

关键是,部分$this->Mangas->translationField('slug')将获得slug的翻译别名字段。或多或少,Mangas_slug_translation.content。当它被本地化为英语时很好,但是使用默认的西班牙语,因为i18n表中没有任何关于此语言的条目,它不会返回任何内容。穷人的方法是为语言提供条件并将其分配给$field变量,但这看起来不太好。

还有其他方法,还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

  

穷人的方法是为语言设置条件并将其分配给$field变量,但这看起来不太好。

我担心这是你必须要做的事情,因为在检索到数据后原始字段被替换,并且翻译行为中没有任何功能可以确定适当的过滤字段。你可以在模型层的某个地方隐藏逻辑(表格,自定义/扩展行为),但是通常没有办法解决它的问题AFAICT。

您可能需要open an issue并提出改进建议。也许根据当前语言环境返回正确过滤字段的其他方法可以补充translationField()方法。