【问题标题】:cakephp components and helpers breaks oop logic! How should I proceed?cakephp 组件和助手破坏了 oop 逻辑!我应该如何进行?
【发布时间】:2012-11-14 03:32:06
【问题描述】:

我在视图和控制器中也需要一个字符串操作类! 我看到 cake 在这种情况下重用组件和帮助程序中的代码,我认为这会破坏 OOP 逻辑(例如 Session->read)!

我没有这样做,而是创建了一个供应商类,我将它导入到 StringsHelper 和 StringsComponent 中。然后我创建了一个相同的函数来实例化 Vendor/String 类并从相应的函数返回结果。这不是完全继承并且仍然是多余的,但是如果我更改类中的代码,它会随处更改。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 这里不要使用vendor clases(因为不是第三方产品),使用Libs(APP/Lib)
  • 既然已经在使用 CakePHP,为什么还要关心 OOP 原则和概念?
  • 我应该移植一个由 OOP 原则开发的整个应用程序!现在应该是用 cake 开发的更大应用程序的一部分!

标签: php class cakephp cakephp-2.0


【解决方案1】:

您不需要将此类类包装在 Helper 或 Component 中。

您可以简单地使用静态方法创建一个类,并将其放入 APP/Lib 中,就像 Mark 提到的那样。

<?php
class StringTool{

  public static function manipulate($string){
   ...
  }

}

然后在您需要的任何类中使用它,无论是在组件、助手、模型等中。

<?php
$s2 = StringTool::manipulate($s1);

【讨论】:

  • 我想在控制器和视图中使用它,因此我有一个组件和一个 Helper。如果我仍然必须通过它们并从我的班级调用函数,情况是一样的。我的主要问题是视图,否则我会把代码放在一个组件中,就是这样,但我也需要一个助手。我明白我为什么要搬进 Lib,这是正确的,但它仍然对我没有帮助!有没有办法在视图中直接调用?
  • 同样的答案:您也可以在视图或控制器中直接使用StringTool::manipulate($s1),而无需创建任何组件或助手。控制器和视图只是 PHP,所以你可以在其中调用任何你想要的库。
  • 静态方法与OOP无关。
  • 我现在明白了!我以为你在哪里说创建一个 Helper 并在那里调用它,这基本上与我已经在做的事情相同,但来自另一个地方。现在我看到我可以将它导入到我的控制器中,并且它也可用于视图。这里没有 OOP,但我得到了所需的结果,那就是保持我的课程干净!
【解决方案2】:

我之前也问过同样的问题。最好的地方是 app/Libs,你可以在其中放置一个带有静态辅助函数的类,这些函数可以在应用程序的任何地方使用,包括控制器和视图。

使用App::import('Lib', 'YourClass')导入类

CakePHP - Where is the best place to put custom utility classes in my app structure?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 2011-04-06
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多