【问题标题】:Data logic on load using a component - cakePHP使用组件加载数据逻辑 - cakePHP
【发布时间】:2011-11-02 22:50:34
【问题描述】:

我正在开发一个项目,其中包括可以评论的文章(当然,cmets 存储在单独的表中)。我想对每个评论的字段执行预逻辑,无论它们在整个应用程序中加载到哪里。我要执行的数据逻辑来自自定义编写的组件。

对我来说,可以在全球范围内实现这一点的合乎逻辑的地方是评论模型,但我可能错了。 如果我可以使用模型中的组件,我什至不是 100%,但我一直在尝试使用 afterFind() 回调函数来执行此逻辑:

    function afterFind($results) {
        foreach ($results as $key => $val) {
            if (isset($val['Comment']['created'])) {
                $results[$key]['Comment']['created'] = $this->Dateconvert->howLongAgo($val['Comment']['created']);;
            }
        }
        return $results;
    }

我已经尝试从这个函数内部回显,它实际上似乎没有被调用,但搜索并没有显示任何函数,但我相信 afterFind() 最能说明我想要实现的目标.

所以我正在寻找一种解决方案,我可以在文章 cmets 上执行加载后逻辑,无论它们是从与 cmets 关联的其他控制器还是在 cmets 控制器中加载的。基本上是一个全球性的一击解决方案:D

【问题讨论】:

  • 你在模型中有 afterFind() ,对吧?它应该在你调用 find() 之后调用。

标签: cakephp components models


【解决方案1】:

cakephp 表示组件用于控制器,行为用于模型,助手用于视图...

首先知道这一点,您可能还知道您可以在任何地方使用它的任何部分,因为 cake 仍然是 php,但不推荐...如果是函数库,您可能希望将其放在 libs 文件夹中并从那里访问它。

如何,简单易用 App::import('component', 'nameComponent');组件可以是lib、控制器等。

话虽如此,afterFind 是加载后的好地方,记住这个函数只在使用 find 时调用,如果你使用,任何其他类似的查询或保存或更新都不会被调用。

希望这对你有帮助:)

【讨论】:

  • 谢谢,这就是我想要的答案。我现在知道我需要阅读更多关于哪些领域:) 我仍然是一个 cakePHP 菜鸟!此外,我没有调用 find() 函数来加载模型数据。再次感谢!
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
相关资源
最近更新 更多