我正在编写一个Cake组件,似乎有意义的是我用它来保存数据而不是在控制器中这样做。在手册中它表示不鼓励在组件中使用模型,但另一种方法是这样做意味着我将在控制器中重复代码。
该组件基本上分析来自各种来源的数据负载,然后为各种模型插入数据。
答案 0 :(得分:24)
如果组件分析来自各种来源的数据负载,则可能将其写为行为。
如果没有,除了在组件中使用模型之外别无选择,请务必正确执行:
$this->ModelName = ClassRegistry::init('ModelName');
我个人认为没有问题,因为核心组件(例如Acl组件)就是这样做的。只要您的组件处理应用程序逻辑和模型处理数据,您就可以了。
答案 1 :(得分:4)
在我看来,DRY是关键路径。为此,我看到两个选择:
如果归结为一个艰难的选择,我会错误地保持我的应用程序DRY,而不是维持严格的MVC规则。
答案 2 :(得分:0)
有人可能会争辩说,如果你想编写组件中生成的数据并且能够将组件打包以进行分发,那么在组件中加载模型是有意义的(特别是如果模型是组件的一部分) 。
例如,我有一个authorize.net AIM(信用卡授权)组件。
从我的控制器我调用组件充电功能。 Authorize.net向我发送了一个响应(在组件内),根据DRY,我想将数据保存在组件中,这样我就不必重复从调用充电函数的地方保存数据。
偏离惯例的另一个好处是,我可以在组件中使用模型而不必在应用程序中拥有模型。
您怎么看?
答案 3 :(得分:0)
使用我熟悉的Cake版本(1.3,2.0),您可以从另一个控制器请求Action。这显然也是不好的做法,但它们提供了明显的原因。我在某些情况下使用过这个,但在尝试来回传递数据时我得到了粗略的结果。我会避免使用这种方法,除了简单的功能。