【问题标题】:CakePHP schema when using Translate behavior使用翻译行为时的 CakePHP 模式
【发布时间】:2013-01-27 14:55:29
【问题描述】:

我在两个字段中使用TranslateBehavior:

  • 姓名
  • 蛞蝓

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

【问题讨论】:

    标签: cakephp internationalization


    【解决方案1】:

    虚拟字段

    翻译行为使用virtual fields,因此,如果您查询hasField 以获得不 存在的字段 - 它会正确返回false,因为该字段实际上并不存在。

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

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

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

    替代方案

    您可以选择以下几件事:

    • 覆盖 hasField 以便它为这些几乎虚拟的翻译字段返回 true
    • 为翻译后的字段定义一个虚拟虚拟字段,以便hasField 的第二个参数确实允许您获得肯定的响应
    • 不要删除未使用的翻译字段 - 所以hasField 总是返回 true

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

    【讨论】:

    • 不幸的是,它仍然不起作用。在模型中,我将 Translate 与带有 slug 字段的数组一起使用,仅此而已。
    • 现在,答案是完整的:) 我使用 $this->Model->Behaviors->Translate 来检查字段,但最好不要删除字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多