使用Translate行为时的CakePHP架构

时间:2013-01-27 14:55:29

标签: cakephp internationalization

我将TranslateBehavior用于两个字段:

  • 名称
  • 蛞蝓

我从模型中删除这些字段,因为字段的内容将保存在i18n table中。它工作得很好,但有时在我的应用程序中我使用$this->Model->hasField('name'),当我从Model表中删除字段后,此函数始终返回false。有一些解决方案吗?

1 个答案:

答案 0 :(得分:2)

虚拟字段

翻译行为使用virtual fields,因此如果您为存在的字段查询hasField,它将正确返回false,因为该字段不会身体存在。

hasField + Translate行为永远不会“起作用”

翻译行为在查询之前按需创建虚拟字段定义,并在查询后销毁它们。因此,您不能只使用the second parameter of hasField,除非您设法在翻译行为的beforeFindafterFind方法之间调用它,结果将始终为false:

$willAlwaysBeFalse = $this->hasField('name', true);

替代

您可以选择以下几种方法:

  • 覆盖hasField,以便为这些几乎虚拟翻译的字段返回true
  • 为已翻译的字段定义虚拟虚拟字段,以便hasField的第二个字段允许您获得肯定的回复
  • 请勿删除未使用的翻译字段 - 因此hasField始终返回true

最简单的解决方案是不删除该字段。这也将确保在数据可能为空白时,如果禁用翻译行为或存在某种错误,您的模型仍然有效。