Saya melihat bahwa di mana pun di mana permintaan terlibat dalam Magento 2, permintaan tersebut merupakan implementasi dari \Magento\Framework\App\RequestInterface
.
Antarmuka ini tidak mengandung metode getPost
(digunakan dalam \Magento\Catalog\Controller\Adminhtml\Category\Widget\CategoriesJson
) dan getPostValue
(digunakan dalam \Magento\Catalog\Controller\Adminhtml\Product\Save
) tetapi mereka masih dipanggil.
Apakah boleh untuk menganggap bahwa metode ini akan selalu ada untuk permintaan http?
atau haruskah saya menggunakan sesuatu yang lain dalam modul saya untuk mendapatkan $_POST
data?
magento2
http-request
Marius
sumber
sumber
Jawaban:
Jangan berpikir begitu. Mereka melanggar kontrak kelas mereka sendiri. Seperti yang dapat Anda bayangkan, itu sama sekali bukan OOP.
Sesuai rekomendasi biasa, saya akan tinggal jauh dari menggunakan apa pun yang tidak dinyatakan dalam
Magento\Framework\App\RequestInterface
karena a) Anda akan membuat Liskov bahagia dan karena b) mereka akan segera menyadari masalah dan memperbaikinya (mudah-mudahan), sehingga melanggar kode Anda (atau tidak; tetapi jika mereka melakukannya, mereka dibenarkan: Anda tidak menggunakan kontrak API, kan?).Jika mereka tidak akan memperbaikinya, mereka akan memiliki implementasi API sangat mampu (yaitu
Magento\Framework\App\Request\Http
) yang tak seorang pun akan benar-benar menggunakan.Selalu tetap dalam kontrak!
sumber
RequestInterface
. Tapi apa yang Anda katakan terdengar resonable. Saya akan menghindari sebanyak mungkin metode ini.if($this->getRequest() instanceof \Magento\Framework\App\Request\Http) {
- jika pemeriksaan itu berlalu, Anda dapat menggunakan parameter itu!getPostValue()
ditulis dalam bahasalib\internal\Magento\Framework\HTTP\PhpEnvironment\Request.php
maka itu mendapatkan
getPost
nilai darivendor\zendframework\zend-http\src\Request.php
Semoga Anda mendapatkan sedikit petunjuk.
Dan ya bisa Anda gunakan
Untuk mendapatkan
post
nilai ,, Anda juga dapat memeriksaContact
modul untuk mendapatkan beberapa petunjuksumber
Untuk mendapatkan data Posting di pengontrol, Anda perlu menggunakan berikut dalam fungsi eksekusi Anda.
sumber
Di Magento 2.1, jika kita mendapatkan objek permintaan dengan menelepon
$this->getRequest()
, itu akan mengembalikanMagento\Framework\App\Request
yang diperluasMagento\Framework\HTTP\PhpEnvironment\Request
. inilah mengapa metode getPostValue dapat dipanggil.Saya mendapat masalah ketika saya mencoba membuat unit test untuk controller saya yang memanggil getPostValue. Karena getPostValue tidak didefinisikan dalam RequestInterface, Alih-alih membuat objek tiruan untuk RequestInterface secara langsung, kami membuat objek tiruan untuk
Magento\Framework\App\Request\Http
.sumber
Tidak.
Metode ini akan diubah di versi masa depan jika tidak ada di antarmuka. Kita harus menggunakan metode di antarmuka sebanyak mungkin. Karena kontrak API, metode yang ada di API tidak akan diubah kecuali dalam peningkatan versi utama.
Iya.
Dalam antarmuka
Magento\Framework\App\RequestInterface
, metodegetParams()
bisa mendapatkan array data posting, metode inigetParam($key, $defaultValue = null)
bisa mendapatkan data spesifik dalam posting.sumber