【问题标题】:Where to put universal functionality in a CakePHP project在 CakePHP 项目中放置通用功能的位置
【发布时间】:2013-07-01 16:46:13
【问题描述】:

我目前创建了一个 Helper (FieldFormatterHelper),以帮助在各种视图中对某些类型的数据(日期、布尔值、枚举类型等)进行一致的格式设置。

特别是我使用整数在 MySQL 中存储某些枚举类型,然后在我的视图中显示相应的字符串值。我现在遇到的问题是,虽然这个帮助程序适用于我的视图,例如管理用户从站点后端访问的“视图”和“索引”视图,但我在几个创建的模型中也有 afterSave() 方法在前端渲染 Mustache 的 JSON 输出。

我或多或少地了解 MVC 的核心思想和基本论点,例如,不要尝试从模型中访问 View Helper,但我需要对 Helper 提供的功能进行某种通用访问。当然,我可以在我的前端 JavaScript 和其他我可能需要它的地方定义我的枚举类型映射,但这违反了 DRY 原则,最终维护起来会很痛苦。

所以,问题是:如果不适合从我的模型中访问/加载我的助手,我应该在哪里以及如何封装此功能,以便我的模型和各种视图都可以使用它?强>

理想情况下,我可以继续使用我现有的FieldFormatterHelper——也许修改为这个新容器的包装器。

任何关于 CakePHP 和 MVC 方式的一般指导将不胜感激。谢谢。

【问题讨论】:

标签: php cakephp cakephp-2.0 dry helper


【解决方案1】:

您可以创建一个静态函数并将其放在 app\view\helper\AppHelper.php 中。然后当你想调用它时,你放

App::uses('AppHelper','View/Helper');

在文件的顶部并这样称呼它:

AppHelper::staticFunction()

【讨论】:

    【解决方案2】:

    您可以将其作为类的静态方法实现并在任何地方使用它

     class Utils {
         static public function formatField($args) {
              // your implementation
         } 
     }
    

    然后让你的助手使用静态方法调用

     Utils::formatField($args);
    

    【讨论】:

    • 使用这个解决方案的最佳方式是什么,它允许我在很多很多视图中维护对当前助手的大量基于实例的引用?
    • 将代码从帮助程序移到静态函数中,并替换为对静态函数的调用。 Helper 实例和调用将保持不变,您可以在应用程序的所有部分中使用该功能。
    • 明白了,这是有道理的。我会试一试,假设它有效(我怀疑它会),我会接受这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    相关资源
    最近更新 更多