CakePHP中使用组件中的模型来保存数据的最佳实践

时间:2009-04-16 10:56:02

标签: php cakephp

我正在编写一个Cake组件,似乎有意义的是我用它来保存数据而不是在控制器中这样做。在手册中它表示不鼓励在组件中使用模型,但另一种方法是这样做意味着我将在控制器中重复代码。

该组件基本上分析来自各种来源的数据负载,然后为各种模型插入数据。

4 个答案:

答案 0 :(得分:24)

如果组件分析来自各种来源的数据负载,则可能将其写为行为。

如果没有,除了在组件中使用模型之外别无选择,请务必正确执行:

$this->ModelName = ClassRegistry::init('ModelName');

我个人认为没有问题,因为核心组件(例如Acl组件)就是这样做的。只要您的组件处理应用程序逻辑和模型处理数据,您就可以了。

答案 1 :(得分:4)

在我看来,DRY是关键路径。为此,我看到两个选择:

  1. 不是将数据保存在组件中,而是以原始形式将其返回到控制器,可以从控制器中保存。
  2. 继续将模型导入组件并执行您需要执行的操作。它并不鼓励,但它们确实使它变得相当容易。
  3. 如果归结为一个艰难的选择,我会错误地保持我的应用程序DRY,而不是维持严格的MVC规则。

答案 2 :(得分:0)

有人可能会争辩说,如果你想编写组件中生成的数据并且能够将组件打包以进行分发,那么在组件中加载模型是有意义的(特别是如果模型是组件的一部分) 。

例如,我有一个authorize.net AIM(信用卡授权)组件。

从我的控制器我调用组件充电功能。 Authorize.net向我发送了一个响应(在组件内),根据DRY,我想将数据保存在组件中,这样我就不必重复从调用充电函数的地方保存数据。

偏离惯例的另一个好处是,我可以在组件中使用模型而不必在应用程序中拥有模型。

您怎么看?

答案 3 :(得分:0)

使用我熟悉的Cake版本(1.3,2.0),您可以从另一个控制器请求Action。这显然也是不好的做法,但它们提供了明显的原因。我在某些情况下使用过这个,但在尝试来回传递数据时我得到了粗略的结果。我会避免使用这种方法,除了简单的功能。