Jangan.
Ini seperti menggunakan ObjectManager::getInstance()->create()
dalam template!
Gunakan Blok khusus yang menerima pembantu sebagai ketergantungan konstruktor, dan tambahkan metode proksi yang memanggil metode pembantu.
Dalam templat:
$block->customMethod()
Di blok:
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();
}
Dalam prinsip OOP berbicara ini menghindari melanggar "Hukum Demeter". Itu merangkum logika bisnis di blok bukan di templat. Sebagai efek samping itu juga membuat logika lebih dapat diuji karena logika dipindahkan ke blok.
Mengenai logika apa yang dimasukkan ke dalam kelas pembantu, saya menemukan bahwa di Magento 2 pembantu kebanyakan masuk akal untuk layanan, seperti sesuatu yang bukan model, tetapi berisi kode yang dapat digunakan kembali, misalnya pemformatan harga (yang terdapat pada inti, tetapi saya dapat pikirkan contoh yang lebih baik saat ini).
di.xml
untuk tipe kelas blok, jangan menyimpan beberapa konfigurasi tata letak. Saya mencoba misalnya untuk melakukannya untuk kelas\Magento\Catalog\Block\Product\View\Type\Simple
, templatedefault.phtml
yang digunakan dalam template kita diabaikan. Tidak ada petunjuk mengapa saat ini