如何在控制器中使用辅助函数?

Posted

技术标签:

【中文标题】如何在控制器中使用辅助函数?【英文标题】:How to use a helper function in a controller? 【发布时间】:2011-09-20 23:40:55 【问题描述】:

我在 app_helper 文件中编写了一些函数。现在我需要在我的控制器中调用该函数 我如何在 CAKEphp 中做到这一点

【问题讨论】:

就像 deceze 已经说过的那样,您不应该在控制器中使用助手。但是,如果您真的想这样做,请参阅有关如何使用 App::import 进行操作的问题答案:How can we call a helper function from a cakephp component 类似问题:How to access a helper from the controller in CakePHP? 【参考方案1】:

你不能。*

如果您的函数非常通用以至于可以在视图之外使用,请在 bootstrap.php 中创建它们或在 libs/ 目录中创建自定义库/类。


* 你可以使用App::import('Helper', 'NameOfHelper')ClassRegistry::init 在任何地方加载任何东西,但你真的不应该这样做。 MVC 分离的重点是让您的应用程序井井有条。

【讨论】:

查看dereuromark.de/2010/06/26/helper-component-lib 了解在控制器中使用代码的其他方式。 @deceze:我把这个函数放在 app_controller 中……是不是更好?【参考方案2】:
App::uses('htmlHelper', 'View/Helper');
$yourTmpHtmlHelper = new HtmlHelper(new View());

终于是与 Cakephp 2.3 兼容的版本了

【讨论】:

你为什么要这样做? :) 大多数时候我们应该可以在这里使用 Lib 类而不是 helpers。 我会在控制器组件中使用帮助器进行泛化并在许多控制器中使用...... 嘿,不管它是什么,它在这个我几乎不关心的小功能中对我有用。谢谢。【参考方案3】:
App::import('Helper', 'Forum.Common');
    $commonHelper = new CommonHelper(new View())

【讨论】:

【参考方案4】:

如果你想在你的所有控制器中使用一些通用功能,比如视图的帮助器, 你必须使用组件 http://book.cakephp.org/2.0/en/controllers/components.html

而不是使用 App::import('Helper', 'NameOfHelper'),这样可以保持 MVC 标准正确并且您的应用程序组织良好。

【讨论】:

【参考方案5】:

你可以像下面这样在Controller中使用帮助器

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

class yourController extends AppController 

public function index()
    $yourHelper = new YourHelper(new View());
    $yourHelper->yourMethod();
  


【讨论】:

谢谢,那是 util【参考方案6】:

您可以通过这种方式调用辅助函数。假设你的助手是 DemoHelp 并调用辅助函数 call_function() 然后你就可以使用它了。

App::import('Helper', 'DemoHelp');
$DemoHelp = new DemoHelpHelper();

$DemoHelp->call_function()

【讨论】:

【参考方案7】:

您可以使用Component,它们存储在Controller/Component/

例如,如果您有Controller/Component/SomeComponent.php 并希望在控制器内的单个操作中即时调用它:

$this->SomeComponent = $this->Components->load('SomeComponent');
$this->SomeComponent->someFunction();

【讨论】:

以上是关于如何在控制器中使用辅助函数?的主要内容,如果未能解决你的问题,请参考以下文章

使用辅助函数从另一个类执行 Segue

如何在 Firebase Cloud Functions 中模拟辅助函数?

如何提取 useTranslate 作为辅助函数而不是组件?

laravel 5.5 《电商实战 》辅助函数

C++ STL应用与实现17: 如何使用迭代器辅助函数

Kotlin:子构造函数如何使用其父构造函数的辅助构造函数?