2012-06-30 51 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) { 
      // ... 
     } 
    } 
}