3

我不想像下面那样添加它,因为我在某些操作方法中只需要它们一次

(所以不要无用加载内存)

class UsersController extends AppController {
    var $name = 'Users';
    var $helpers = array('Html', 'Session');
    var $components = array('Session', 'Email');

4

3 回答 3

7
class UsersController extends AppController {
  public function method_name() {
    $this->helpers[] = 'MyHelper'
  }
}

更多关于这在文档中

希望有帮助。

于 2010-11-08T16:58:49.767 回答
0

您可以使用加载助手

$this->helpers[] = 'MyHelper';

正如 Rob 上面提到的,但这不适用于控制器,因为它们有初始化和启动方法,需要调用它们才能工作。

我在网络上遇到了一些代码,用于在控制器操作中加载组件:ComponentLoaderComponent

是的,它是一个组件,但它不是很大,因此将它包含在您的控制器中应该不是问题。

或者你可以研究它来看看组件加载是如何工作的,然后编写你自己的控制器动作来做同样的事情。

于 2010-11-08T19:20:11.493 回答
0

我使用一个组件来动态添加助手和组件:

$this->Common->addHelper('Tools.Datetime');
$this->Common->addHelper(array('Text', 'Number', ...));
$this->Common->addComponent('RequestHandler');
$this->Common->addLib(array('MarkupLib'=>array('type'=>'php'), ...));

ETC

完整的代码可以在我刚刚打开的 cakephp 增强票中看到:http: //cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/1277

或使用 php 标记: http: //www.dereuromark.de/2010/11/10/loading-classes-on-the-fly/

它还修复了 mtnorthrop 发布的解决方案的一些小问题。现在可以使用插件以及传递的选项。玩得开心。

于 2010-11-08T22:53:41.130 回答