2011-07-03 38 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);