我想这个问题的简单答案是 组件 .
虽然我同意,但我觉得必须为如此具体的东西编写一个组件很奇怪。
例如,假设我有一个用户表。当一个用户被创建时,它应该形成一个事件的链式 react ,在数据库周围启动与用户相关的不同类型的数据。我认为最好避免直接从不同的 Controller 操作数据库,而是将所有这些巧妙地打包在一个方法中。但是,由于需要单独访问某些逻辑,因此我真的无法在单个方法中拥有整个包。相反,我认为将其分解为更小的部分是合乎逻辑的(例如 $userModelOrController->createNew()
和 $candyStorageModelOrController->createNew())
,它们只与各自的数据库表进行交互。
现在,如果将逻辑放到模型中,它会很好地工作,直到我需要使用其他模型为止。当然是有可能的,但是和在 Controller 中加载模型相比,就没有那么简单了。这就像一个 Cake 开发人员告诉我“当然,如果你想那样做是有可能的,但我不会那样做”。
然后,如果将逻辑放在 Controller 中,我可以通过 $this->loadModel()
轻松访问其他模型。 ,但这让我回到了之前解释的情况,因为我需要能够无限期地继续链式 react 。从 Controller 访问其他 Controller 是可能的,但似乎没有任何直接的方法可以这样做,所以我猜我仍然没有做对。
通过使用组件,这个问题可以轻松解决,因为组件可用于我想要的每个 Controller 。但是就像我一开始写的那样,专门为这个任务创建一个组件感觉很尴尬。对我来说,组件更像是额外功能的包(如核心组件),而不是共享 Controller 特定逻辑的东西。
由于我是整个 MVC 的新手,我可能完全误解了这个概念。再一次,如果有人指出我正确的方向,我将不胜感激:)
最佳答案
每当我面对如此艰难的场景时,我都会盯着 CakePHP Events System 无限小时。
到目前为止,我设法以某种方式避免了它(主要是由于缺乏勇气),但我认为它值得研究,因为它显然旨在在某种程度上跳过 MVC“墙”。
另一种可能的解决方案是 Finite State Machine behavior ,它允许您更干净地将逻辑推向模型,并围绕它构建 Controller +组件。此行为的唯一后备(恕我直言)是它不允许多个 state
单个模型上的字段。
对此类问题进行更真实的表述可能会产生更好的解决方案,因为我们中的许多人都走上了这条道路,这可能是一个有值(value)的例子。
关于cakephp - 在 CakePHP 中共享应用程序逻辑的正确位置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064883/