Saya melihat Anda datang ke solusi yang tepat, hanya ingin meringkas.
Injeksi konstruktor harus digunakan untuk mengambil helper (atau contoh lain) di kelas apa pun yang Anda butuhkan:
class SomeClass
{
public function __construct(\Magento\Core\Helper\Data $helper)
{
$this->helper = $helper;
}
public function doSmth()
{
$this->helper->someMethod();
}
}
Perhatikan bahwa tidak ada komentar phpDoc yang diperlukan , Magento akan membaca tanda tangan konstruktor secara langsung untuk mengetahui dependensi apa yang diperlukan.
\ Magento \ Core \ Helper \ Factory harus digunakan hanya dalam kasus-kasus langka ketika Anda harus memanggil banyak pembantu, atau Anda tidak tahu persis mana yang Anda butuhkan.
Penggunaan Object Manager secara langsung sangat tidak disarankan . Jadi tolong hindari menggunakan:
\Magento\Core\Model\ObjectManager::getInstance()
Itu ada di sana hanya untuk serialisasi / deserialization.
helper
dalam template, seperti$this->helper('Magento\Catalog\Helper\Image')
, ini mengikuti praktik terbaik?Sepertinya orang-orang yang mendorong Magento untuk menggunakan sistem injeksi ketergantungan otomatis baru mereka untuk mendapatkan pembantu dan model ke objek melalui konstruktor objek.
Versi singkatnya? Jika Anda memiliki objek yang dibuat oleh manajer objek,
dan menghiasi konstruktor dengan PHPDoc, dan parameter memiliki set petunjuk jenis yang tepat, manajer objek akan secara otomatis instantiate helper (atau, saya percaya, objek lain) untuk Anda.@param
Misalnya, konstruktor berikut akan menyuntikkan pembantu data inti ke objek.
sumber
Terlepas dari semua jawaban di atas, jika Anda harus menggunakan helper dalam templat phtml, Anda dapat melakukannya seperti ini:
Saya harap ini membantu jika seseorang tidak mengetahuinya sebelumnya;)
sumber
Cara helper dibuat instantiated (setidaknya untuk modul Backend (~ dev50) baru) adalah melalui helperFactory:
Yang pada dasarnya hanyalah tipe khusus dari pabrik model. Contoh: Magento \ Core \ Block \ Context line 143 (dev50) sebagai bagian dari konstruktor:
Pabrik helper akan mengembalikan model yang diminta berdasarkan nama kelas dan memastikan bahwa itu adalah
instanceof
kelas abstrak helper:Jika Anda mengimplementasikannya sendiri , sepertinya inti Magento memuatnya dengan salah satu dari dua cara berikut:
Gulung pabrik Anda sendiri:
Atau langsung ambil:
sumber
get
?Coba dengan cara ini
sumber