tapi di sini ada tangkapan.
Anda harus membuat anggota yang dilindungi pada model yang dipanggil _blockFactorydan menyuntikkan instance dari \Magento\Framework\View\Element\BlockFactorydalam konstruktor dan menugaskannya ke anggota itu var.
@Marius $ toplink = $ this-> getLayout () -> getBlock ('top.links') -> toHtml (); gunakan di magento 1 untuk magento 2 $ this -> _ view-> getLayout () -> getBlock (Full \ Block \ Class \ Name \ Here ') -> toHtml (); ini memberikan kesalahan seperti kesalahan fatal ini: Memanggil ke fungsi anggota toHtml () pada non-objek bagaimana saya bisa mendapatkan toHtml ()?
ND17
jika Anda berada di controller, Anda tidak perlu menyuntikkan apa pun _view. Itu harus tersedia secara default, meskipun saya pikir itu sudah usang sekarang. Saya menulis jawaban ini 1,5 tahun yang lalu
Marius
1
@SachinS. Anda seharusnya tidak menggunakannya lagi. _viewsudah ditinggalkan sekarang di controller dan akan segera pergi,
Jawaban:
LUAR BIASA: JAWABAN MENGUBAH KE MAGENTO 2 ALPHA
Saya berharap semudah itu.
Itu tergantung dari mana Anda ingin instantiate.
Jika Anda ingin membuat instance dari dalam blok lain lakukan seperti ini:
Dari dalam controller lakukan ini:
Dari dalam model:
tapi di sini ada tangkapan.
Anda harus membuat anggota yang dilindungi pada model yang dipanggil
_blockFactory
dan menyuntikkan instance dari\Magento\Framework\View\Element\BlockFactory
dalam konstruktor dan menugaskannya ke anggota itu var.Sesuatu seperti ini:
Untuk instantiasi blok dari dalam helper, ia bekerja sama seperti untuk model
sumber
_view
. Itu harus tersedia secara default, meskipun saya pikir itu sudah usang sekarang. Saya menulis jawaban ini 1,5 tahun yang lalu_view
sudah ditinggalkan sekarang di controller dan akan segera pergi,Untuk membuat instance sebuah blok, Anda harus menggunakan
\Magento\Framework\View\LayoutInterface
kelas dancreateBlock()
metodenya.Dengan kelas pembantu Anda bisa melakukannya dengan kode ini:
Kemudian telepon
$helper->getBlock()
dari tempat yang Anda butuhkan.sumber