【问题标题】:How don't break MVC and DRY, sharing a method (Helper/Controller)如何不破坏 MVC 和 DRY,共享一个方法(Helper/Controller)
【发布时间】:2014-04-03 19:11:31
【问题描述】:

关于 StackOverflow 的第一个问题(我不知道我这样做是否正确,如果我搞砸了,请见谅)

背景: 我的控制器有一个方法可以列出我的应用程序和插件中的所有操作,称为 getActions()。

而且我需要在覆盖 HtmlHelper->link() 方法的 Helper 中使用 getActions(),因为此方法的目的是在 Acl 禁止链接时返回 null,因此不会呈现任何会导致被禁止的行为。

问题 这个方法怎么分享?我做错了吗?

Lib 是正确的方法吗?

这似乎不对:In CakePHP, how do I call an AppController method from a helper?

【问题讨论】:

标签: php cakephp controller helper cakephp-2.3


【解决方案1】:

不要分享方法,分享它的输出。如另一个问题的链接中所述。

我假设这个数据是静态的,意思是:如果从应用程序的任何部分调用它,它将返回相同的值。

在控制器中调用方法,将其输出存储在视图变量或会话中,并编写一个帮助程序来访问此信息并执行 acl 逻辑。

它不会破坏 MVC 并且会避免 DRY。

【讨论】:

  • 我会将它用作 Lib,原因有两个:1 - 方法太通用 2 - 是插件方法,如果它在我的应用程序上,我会按照你的建议,似乎正确的方法让它松耦合
  • 看不到 Lib 如何是此类问题的正确(自然)解决方案。但它会做的伎俩..
  • 我需要从不同的地方和不同的目的调用这个方法。一旦在会话中为 Helper 存储数据时调用它是有道理的,但当我为 Upload my Acl 调用它时就没有意义了。
【解决方案2】:

该方法的正确位置是 Lib,因为它是一种通用方法,将用于具有不同目标的不同地方。

CakePHP 的核心有很多这种方法的例子,例如:CakeTime、CakeNumber 等。

在一些CakeDC 插件中也可以看到其他示例。

恕我直言,@yossi 关于“假设数据是静态的”是正确的,但他将数据存储在 Session 中的方法只会让我的代码更加混乱。

在我的特殊情况下,我采用 Lib 方式。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多