【问题标题】:cakephp using components as controller methodscakephp 使用组件作为控制器方法
【发布时间】:2013-07-31 19:20:18
【问题描述】:

我正在尝试找到从另一个控制器中初始化方法的最佳、最简洁的方法。我基本上想将“喜欢”、“帖子”等记录为“动作”。

操作在提交时工作正常,但不是来自它自己的控制器之外。

在 LikesController 中,我希望能够简单地去:

$this->Action->add($fields);

但这不起作用,即使我事先做了$this->loadModel('Action');。在阅读之后,似乎“组件”是要走的路......

所以我想知道如何使用组件来实现这一点。到目前为止,我的 LikesController 中有这个:

public $components = array(
    'RequestHandler','Helper',
        'Action' => array('controller'=>'actions', 'action'=>'add'),
);

但是当我尝试拨打$this->Action->add时仍然没有喜悦。

这样做的最佳方法是什么?如何设置组件类使其像 Action 控制器一样工作,并能够使用它的方法?

如果我可以将 REP 奖励给最佳答案,那么我会..!非常感谢。

【问题讨论】:

    标签: php mysql cakephp components


    【解决方案1】:

    组件与模型不同。因此,如果您想以这种方式进行操作,则必须将您的 Action 模型转换为组件。

    该组件将进入Controller/Component/ActionComponent.php,然后它可以像这样包含到您的控制器中:

    public $components = array(..., 'Action');
    

    您的组件中的逻辑可以与模型中的逻辑相似,但存在一些差异。例如,您仍然可以有一个 Action 模型,并且组件可以将它用于 CRUD 和其他东西。不过,您必须使用 ClassRegistry::init() 将模型加载到您的组件中。

    我无法真正解释如何准确地做你想做的事,原因之一是我不太清楚你到底想要什么。 不过,我之前写过自己的 Component,如果你愿意,可以参考它——它可能比你的更复杂,所以你可以看看如何为它编写方法。

    Custom ACL Component

    在那个例子中,一旦它被包含在控制器中,我可以在任何我喜欢的地方调用$this->CustomAcl->check()

    我希望这至少足以让您入门。

    【讨论】:

    • 谢谢,这看起来很棒,虽然经历了这个,但我遇到了一个障碍,那就是组件的初始化。如果您能提供进一步的帮助,我将不胜感激..!!!!!! pastebin.com/7CiFTByg
    • 我也试过第 10 行下划线,即$this->_controller =& $controller;,但仍然是同样的错误@SharkofMirkwood
    • 试试$this->_controller = $controller;?在任何情况下,您可能实际上并不需要覆盖 initialise() 方法 - 这有点特定于我的应用程序。尝试完全摆脱那部分;)
    • 同时删除您认为可能不需要的任何其他内容 - 只需放入您需要的内容,如果有任何抱怨,请放回任何内容。
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2010-12-10
    • 1970-01-01
    相关资源
    最近更新 更多