しないでください。
これはObjectManager::getInstance()->create()
テンプレートで使用するようなものです!
代わりに、ヘルパーをコンストラクター依存関係として受け取るカスタムブロックを使用し、ヘルパーメソッドを呼び出すプロキシメソッドを追加します。
テンプレート:
$block->customMethod()
ブロック内:
public function __construct(Path/To/Helper/Class $helperClass, ...other dependencies...)
{
$this->helper = $helperClass;
// ...other assignments and call to parent::__construct()
}
public function customMethod()
{
return $this->helper->customMethod();
}
OOPの原則では、これは「デメテルの法則」に違反することを避けます。テンプレートではなく、ブロックにビジネスロジックをカプセル化します。副作用として、ロジックがブロックに移動されるときにロジックをテストしやすくします。
ヘルパークラスにどのロジックを入れるかに関して、Magento 2のヘルパーは、モデルではなく、再利用可能なコード、たとえば価格フォーマット(コアに含まれていますが、今はもっと良い例を考えないでください)。
di.xml
、ブロッククラスタイプので設定を使用しているように見えますが、一部のレイアウト構成は保持されません。たとえば、クラス\Magento\Catalog\Block\Product\View\Type\Simple
でそれを実行しようとしましdefault.phtml
たが、テンプレートで使用されていたテンプレートは無視されます。現時点では何の手がかりもない