2011-07-03 73 views
4

我需要在組件和幫助程序之間共享數據。我將自制的支付服務formdata生成器轉換爲CakePHP插件,我希望能夠從控制器(使用組件)填寫付款數據並使用助手打印出數據。將數據從CakePHP組件傳遞給幫助程序

到目前爲止我嘗試過的一切都覺得有點太難懂,所以讓我問你:有沒有優雅的方式將數據從組件傳遞給助手?


編輯:

我通過組件初始化過程中加入原formadata類實例ClassRegistry解決了這一特殊情況。這樣,助手也可以使用ClassRegistry訪問實例。

但是,這隻適用於對象,所以問題仍然存在。

回答

4

有沒有優雅將數據從組件傳遞給助手的方法?

是的,就像你將任何數據傳遞給幫助者一樣。在你看來。

在你的組件中,我會做類似下面的事情。 beforeRender()操作是CakePHP component callback

public function beforeRender(Controller $controller) { 
    $yourVars = 'some data'; 
    $goHere = 'other stuff'; 

    $controller->set(compact('yourVars', 'goHere')); 
} 

然後在您的視圖中,您可以將數據傳遞給您的幫助者,就像正常一樣。

// view or layout *.ctp file 
$this->YourHelper->yourMethod($yourVars); 
$this->YourHelper->otherMethod($goHere); 
+0

我以前想過這個自己,但很快放棄了一些理性觀念。謝謝:) – jpeltoniemi

+0

是的,這是比我更明智的解決方案。 cspray,在這裏,我也要感謝! :D –

6

有類似的問題,我發現這個解決方案對我來說最合適。

您可以使用helper的__construct方法與$ controller-> helpers數組配對。

由於在調用Component::beforeRender之後調用Helper::_construct(),因此可以修改$controller->helpers['YourHelperName']數組以將數據傳遞給助手。

組件代碼:

<?php 

public function beforeRender($controller){ 
    $controller->helpers['YourHelperName']['data'] = array('A'=>1, 'B'=>2); 
} 
?> 

助手代碼:

<?php 

function __construct($View, $settings){ 
    debug($settings);  
      /* outputs: 
       array(
        'data' => array(
         'A' => (int) 1, 
         'B' => (int) 2 
        ) 
       ) 
      */ 
} 

?> 

我使用CakePHP 2.0,因此該方案應爲早期版本進行測試。

+0

謝謝!記住疑問 –

0

除了什麼@Vanja,你也可以做到這一點之前,爲了在實例化控制器的新觀點:

// In your controller method 
// must be set prior to instantiating view 
$this->helpers['YourHelperName']['paramsOrAnyName'] = ['var' => $passed_var]; 

$_newView = new View($this); 
$return_result = $_newView->render($element_to_view, $layout);