如何在控制器中使用辅助函数?
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();
【讨论】:
以上是关于如何在控制器中使用辅助函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase Cloud Functions 中模拟辅助函数?