0

Cakephp 2.1を使用しており、ビューヘルパーからプラグインにあるコンポーネントメソッドを呼び出す必要があります。

コンポーネントはここにあります:

/app/Plugin/Abc/Controller/Component/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();
}
4

3 に答える 3

0

CakePHP コンポーネントからヘルパーにデータを渡す

これは、これを処理するための非常に優れた方法のようです。

以前と同じように作業してみましたが、すぐに解決できるように思えますが、長期的には、コンポーネントとヘルパーをコントローラーの 2 つの別個のエンティティとして使用する方がよいでしょう。

リー

于 2012-06-30T11:43:28.830 に答える
0

ロジックをトレイトに配置し、これをコンポーネントとヘルパーから使用できます。ポーパスが同じビジネスロジックを異なる場所で使用する場合は、コードの重複を避けることができます。

例によって

特性 (ファイル app/Lib/NameOfTrait.php または app/PluginName/Lib/NameOfTrait.php)

trait NameOfTrait {

   public function theTraitFunc($a, $b) {
       // Code here
   }
 }

コンポーネント:

App::uses('Component', 'Controller');
App::uses('NameOfTrait', 'PluginName.Lib');
class NameOfComponent extends Component {
use NameOfTrait;
private $member;
private $controller;

public function __construct(ComponentCollection $collection, $settings = array()) {
    parent::__construct($collection, $settings);
    $this->member = $settings['memberName'];
}    
 function startup(Controller $controller) {
    $this->controller = $controller;
}
/**
 * Wrap function call of trait function,
 * I think the function doesn't have the same name, 
 * I don't try this  but I think  is obvious, 
 * to avoid the function to call itself
 */
public function theTraitFuncWrap($a) {
    return $this->theTraitFunc($a, $this->member);        
 }
}

ヘルパーについても同じことを行います。

これが誰かの助けになることを願っています、さようなら:)

于 2018-07-19T08:47:23.347 に答える