Saya berasumsi itu AppFactory\Core\Api\SettingInterface::get()
adalah titik akhir REST. Dalam hal ini dalam komentar phpdoc, Anda perlu menentukan apa yang akan dikembalikan. Handler Magento REST akan mengambil nilai itu dan memprosesnya untuk menghapus semua data yang tidak perlu. Apa yang tersisa akan dikodekan ke dalam JSON sehingga dalam javascript Anda dapat mengambilnya sebagai JS hash yang tepat dan bukan string yang dikodekan json.
Trik tentang titik akhir itu adalah bahwa Anda perlu mendefinisikan dengan tepat apa yang akan Anda kembalikan. Magento tidak akan dapat memproses sesuatu yang umum seperti "array" di mana Anda akan mengatur apa pun yang Anda suka.
Dalam kasus Anda, agar tidak mencoba bermain dengan serangkaian string, akan lebih mudah untuk membuat antarmuka yang akan dikembalikan oleh titik akhir Anda.
<?php
namespace AppFactory\Core\Api;
/**
* @api
*/
interface SettingsInterface
{
/**
* @return Data\SettingsInterface
*/
public function get();
}
Sekarang ketika Anda mengembalikan sebuah instance dari objek yang mengimplementasikan antarmuka itu, Magento akan membaca phpdocs-nya dan akan memproses nilai pengembaliannya. Sekarang buat file AppFactory\Core\Api\Data\SettingsInterface
sebagai berikut
<?php
namespace AppFactory\Core\Api\Data;
interface SettingsInterface
{
/**
* @return int[]
**/
public function getSettings();
/**
* @return string[]
**/
public function getExtra();
}
Sekarang ketika Anda membuat kelas aktual yang akan mengimplementasikan 2 metode get tersebut dan Anda akan mengembalikannya AppFactory\Core\Api\SettingsInterface::get()
lalu magento akan mengembalikan sesuatu seperti
{
"settings": [1, 2, 5],
"extra": ["my","array","of","strings"]
}
Jika Anda ingin level lain, Anda perlu membuat antarmuka lain yang akan mempertahankan settings
struktur dan menambahkannya sebagai nilai balik untuk AppFactory\Core\Api\Data\SettingsInterface::getSettings()
.
Jika Anda perlu memiliki sesuatu yang dinamis dan Anda tidak ingin atau tidak dapat mempersiapkan antarmuka struktur ini maka Anda dapat mencoba mengatur string json-encoded dan menempatkan @return string
untuk salah satu bidang. Namun demikian, Anda harus memastikan untuk mendekode string secara manual setelah menerima respons, sehingga respons Anda akan terlihat seperti ini:
{
"settings": [1, 2, 5],
"extra": "{\"test\":\"string\",\"value\":8}"
}
dan untuk menggunakan response.extra.test
Anda harus terlebih dahulu melakukannya response.extra = JSON.parse(response.extra);
secara manual