0

我试图找到从另一个控制器中初始化方法的最佳、最干净的方法。我基本上想在“喜欢”、“帖子”等发生时将它们记录为“动作”。

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

在 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 奖励给最佳答案,那么我会..!提前谢谢了。

4

1 回答 1

1

组件与模型不同。所以如果你想以这种方式做事,你必须把你的Action模型变成一个组件。

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

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

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

我无法真正解释如何准确地做你想做的事,原因之一是我不太清楚你到底想要什么。但是,我之前已经编写了自己的组件,如果您愿意,可以将其用作参考 - 它可能比您的更复杂,因此您可以了解如何为其编写方法。

自定义 ACL 组件

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

我希望这足以让你至少开始。

于 2013-07-31T12:44:55.127 回答