2012-06-30 79 views
0

我使用CakePHP 2.1内,我需要调用组件的方法女巫驻留在一个插件,从一个视图助手:CakePHP的调用组件的方法的辅助

该组件是在这里:

/应用/插件/ ABC /控制器/组件/ AbcComponent.php

助手是在这里:

/app/View/Helper/SimpleHelper.php

我想里面帮手:

App::import('Component', 'Abc.Abc'); 
$this->Abc = new Abc(); or $this->Abc = new AbcComponent; 

$this->Abc = $this->Components->load('Abc.Abc'); 

这个组件使用没有问题的控制器内。 我知道这不是建议(MVC设计等),但如果我不这样使用它,我需要复制大量的代码。我需要这样的:

MyHelper extends Helper{ 
    $simpleVar = Component->get_data(); 
} 

回答

0

Passing data from CakePHP component to a helper

这似乎是处理这是一个非常好的方式。

我试着按照以前的方式工作,尽管它看起来是一个很好的即时解决方案,但从长远来看,最好是将组件和辅助程序作为控制器中的两个独立实体使用。

+0

这个解决方案是好的,但我需要那么从助手调用组件。不是组件的帮手。所以我需要:$ varInsideHelper = Compoent-> giveSomeData(); – cornelv

+0

你好,关键是你不应该从助手调用组件。事实上,我之前做的方式在CakePHP中不再允许。你可以尝试ClassRegistry :: init('ComponentName');我不确定这是否会以您需要的方式工作,但可能。 –

+0

如果您认为您需要从助手调用组件,那么您的软件存在严重的体系结构问题,您应该重新考虑您的操作以及操作方法。 – burzum

7

我使用CakePHP 2.4

这是我如何成功地调用组件从助手:

App::uses('AclComponent', 'Controller/Component'); 
class MyHelper extends AppHelper { 
    public function myFunction() { 
     $collection = new ComponentCollection(); 
     $acl = new AclComponent($collection); 
     // From here you can use AclComponent in $acl 
     if ($acl->check($aro, $aco) { 
      // ... 
     } 
    } 
}