【问题标题】:Using a Helper in a Vendor - CakePHP在供应商中使用助手 - CakePHP
【发布时间】:2013-04-21 03:46:03
【问题描述】:

在我的 CakePHP 应用程序中,我定义了一个向导供应商,它输出多步向导类型插件的 HTML 及其相关的 Javascript 代码。我想使用 JsHelper 以便我可以将我的代码缓冲到页面底部。

一切正常,包括我的 Javascript 代码,如果我直接用 HTML 输出它的话。我只是不太清楚如何使用 JsHelper。我是否使用 App:Uses 或 App:Import 语句?在视图中使用它时,我可以在控制器级别定义它,但这在这里不起作用。

$this->Js->buffer("

$('.mws-wizard').wizard({
    buttonContainerClass: 'mws-button-row', 
    orientation: '$orientation',
    forwardOnly: $forwardOnly
});

");

【问题讨论】:

    标签: javascript jquery cakephp helper


    【解决方案1】:

    如果您自己开发此“供应商”软件包,则不应将其开发为“供应商”,而应将其开发为插件。

    vendor 文件夹用于包含未使用 CakePHP 开发的第三方库(例如,在您的应用程序中使用 Zend 框架的一部分)。

    来自manual

    注意:加载供应商通常意味着您正在加载不遵循约定的包。对于大多数供应商包,建议使用 App::import()。

    创建一个插件而不是一个供应商

    要开发可用于不同项目/应用程序的可重用代码,请将您的代码开发为插件。插件基本上是“迷你 CakePHP 应用程序”。插件中的类可以在您的应用程序中使用,反之亦然;插件可以像在应用程序中一样使用 CakePHP 助手。

    Creating Your Own Plugins

    关于 JsHelper

    与 Sam Delaney 的评论相反,您对 JsHelper 的使用对我来说看起来不错。将一些脚本添加到 Js 缓冲区以将其输出到布局中似乎很有用。只是不要尝试将它用于扩展的 JavaScript 块;应该放在外部 .js 文件中。

    建议自己编写 JavaScript 代码,不要让 JsHelper 生成代码为你(例如,不要使用 @ 987654323@)。这可能是个人的,但是 IMO 这使得跟踪/调试您的 JavaScript 变得更加困难,并且比 $('#foo').click('event code');

    更具可读性

    【讨论】:

    • 我不把它做成插件的最大原因是两个类大约有 60 行代码。整个插件架构似乎有点矫枉过正。
    • 插件不一定是矫枉过正。例如,如果一个插件只包含一个 single Helper,只需创建 plugin-directory,一个 Helper 目录并将 Helper 放入其中。在 bootstrap.php 中加载插件,您就可以开始了。 但是如果代码确实是特定于应用程序的,只需将其放入应用程序本身即可。
    【解决方案2】:

    我个人从来没有发现 CakePHP 中的 JavaScript 帮助器有任何用处,好像你不小心,你会得到<script> 标记乱七八糟的标记,这有时会使调试变得非常困难。根据您的描述,您将 JavaScript 聚合并附加在 HTML 的底部,因此它没有我之前强调的情况那么糟糕。

    是否可以将所有 JavaScript 重新定位到 .js 文件以封装向导插件/供应商的所有功能?如果你能做到这一点,那就符合 MVC 原则,你可以在逻辑上分离视图标记和表示逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      相关资源
      最近更新 更多