Saya memiliki Modul yang memproses tindakan Post, dan kemudian dialihkan.
Sekarang ada kasus kesalahan, dan saya ingin menampilkan pesan untuk mereka kepada pengguna.
Saya sudah tahu, bahwa kode ini menambahkan pesan ke sesi.
$this->messageManager->addError(
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
);
Tapi saya tidak melihat bagaimana memicu rendering.
Saat ini hanya ditampilkan ketika saya menjalankan tindakan lain, yang sudah menggunakan ini dengan cara yang berfungsi.
Seperti misalnya login dengan kata sandi yang salah.
Jawaban:
Anda perlu menggunakan metode injeksi objek pada kelas aksi modul Anda untuk menyuntikkan objek manajer pesan ke dalamnya, saya memberikan contoh apa yang dapat Anda lakukan. Semoga ini bisa membantu
sumber
addError
metode sudah ditinggalkan harus addErrorMessage sekarangTidak yakin apakah ini yang Anda cari, tetapi saya mencobanya.
Anda dapat mengambil pesan seperti ini:
dimana
messageManager
instance dari\Magento\Framework\Message\ManagerInterface
.Pada intinya, ini digunakan untuk panggilan ajax untuk mengembalikan pesan kesalahan dalam respons json seperti ini (
\Magento\Catalog\Controller\Adminhtml\Category\Move
):Untuk tindakan dengan output Anda tidak harus melakukan apa pun (saya pikir). File
default.xml
tata letak dariMagento_Theme
modul sudah berisi blok ini<block class="Magento\Framework\View\Element\Messages" name="messages" as="messages" template="Magento_Theme::messages.phtml"/>
yang seharusnya menangani pesan.[Catatan]:
Jangan gunakan
$this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
. Suntikkan konstruktor Anda ke instanceMagento\Framework\Escaper
dan gunakan itu.sumber
/customer/section/load/
. Mungkin itu membantu.Anda juga dapat menemukan pengelola pesan yang dapat diakses melalui
$context
yang disuntikkan ke konstruktor tindakan:Selanjutnya gunakan saja seperti yang disebutkan dalam jawaban di atas
Semoga ini bisa membantu
sumber
Bagi saya sepertinya Anda perlu menambahkan blok khusus untuk pesan Anda jika Anda ingin menunjukkannya dengan cara non-JS.
Misalnya di Magento \ Checkout \ view \ frontend \ layout \ checkout_cart_index.xml ada:
Magento\Checkout\Block\Cart\ValidationMessages
blok memperluas blok inti\Magento\Framework\View\Element\Messages
yang bertanggung jawab untuk merender pesan.Blok yang didefinisikan
default.xml
untuk pesan JS hanya saya percaya.sumber
checkout_index_index.xml
?Melihat
vendor / magento / module-customer / view / frontend / web / js / customer-data.js
Seperti yang bisa kita lihat, sudah ada fungsi pemeriksaan bawaan . Jika respons kami berisi kata kunci:,
'redirect', 'backUrl'
pesan akan dimuat setelah diarahkan.'redirect', 'backUrl'
.sumber