cakephp - 在 CakePHP 中共享应用程序逻辑的正确位置是什么?

标签 cakephp model controller components

我想这个问题的简单答案是 组件 .

虽然我同意,但我觉得必须为如此具体的东西编写一个组件很奇怪。

例如,假设我有一个用户表。当一个用户被创建时,它应该形成一个事件的链式 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/

相关文章:

mysql - CakePHP 分页器中的数字排序

mysql - Cakephp 3.3迁移如何设置外键约束?

cakephp - 在CakePHP中为一个模型保存多个记录

c# - MVC 获取所有 Action 方法

ios - 崩溃: _finishDecodingLayoutGuideConnections:] unrecognized selector sent to instance

php - 无法在 cakePHP 中对数据进行排序和分页

asp.net-mvc - 一旦写入ValidationSummary(),就从ModelState中移除ModelErrors

php - Laravel 如何在 Eloquent 模型中添加自定义函数?

ruby-on-rails - Rails不在开发模式下重新加载我的模型

javascript - Node 应用程序中的 MVC Controller ,这些是 Controller 吗?