Supongo que AppFactory\Core\Api\SettingInterface::get()
es un punto final REST. En ese caso, en los comentarios de phpdoc debe definir qué devolverá esto. El manejador REST de Magento tomará ese valor y lo procesará para eliminar todos los datos que sean innecesarios. Lo que queda se codificará en JSON, por lo que en javascript puede recuperarlo como un hash JS adecuado y no una cadena codificada con json.
El truco sobre esos puntos finales es que debe definir con mucha precisión qué devolverá. Magento no podrá procesar algo tan general como "matriz" donde establecerá lo que quiera.
En su caso, para no intentar jugar con una variedad de cadenas, será más fácil crear una interfaz que devolverá su punto final.
<?php
namespace AppFactory\Core\Api;
/**
* @api
*/
interface SettingsInterface
{
/**
* @return Data\SettingsInterface
*/
public function get();
}
Ahora, cuando devuelve una instancia de un objeto que implementa esa interfaz, Magento leerá sus phpdocs y procesará sus valores de retorno. Ahora cree un archivo de la AppFactory\Core\Api\Data\SettingsInterface
siguiente manera
<?php
namespace AppFactory\Core\Api\Data;
interface SettingsInterface
{
/**
* @return int[]
**/
public function getSettings();
/**
* @return string[]
**/
public function getExtra();
}
Ahora, cuando crea una clase real que implementará esos 2 métodos get y la devolverá, AppFactory\Core\Api\SettingsInterface::get()
entonces magento devolverá algo como
{
"settings": [1, 2, 5],
"extra": ["my","array","of","strings"]
}
Si desea otro nivel, debe crear otra interfaz que mantenga la settings
estructura y la agregue como valor de retorno AppFactory\Core\Api\Data\SettingsInterface::getSettings()
.
Si necesita tener algo que sea dinámico y no desea o no puede preparar esta interfaz de estructura, puede intentar configurar una cadena codificada con json y colocarla @return string
en cualquiera de los campos. De esta manera, sin embargo, deberá asegurarse de decodificar manualmente esa cadena después de recibir la respuesta, ya que su respuesta se verá así:
{
"settings": [1, 2, 5],
"extra": "{\"test\":\"string\",\"value\":8}"
}
y para usarlo response.extra.test
primero response.extra = JSON.parse(response.extra);
deberá hacerlo manualmente