Je suppose que AppFactory\Core\Api\SettingInterface::get()
c'est un point de terminaison REST. Dans ce cas, dans les commentaires phpdoc, vous devez définir ce que cela renverra. Le gestionnaire Magento REST prendra cette valeur et la traitera pour supprimer toutes les données inutiles. Ce qui reste sera encodé en JSON, donc en javascript, vous pouvez le récupérer en tant que hachage JS déjà correct et non en chaîne encodée en json.
L'astuce à propos de ces points de terminaison est que vous devez définir très précisément ce que vous retournerez. Magento ne sera pas en mesure de traiter quelque chose d'aussi général que "array" où vous définirez ce que vous voulez.
Dans votre cas, afin de ne pas essayer de jouer avec un tableau de chaînes, il sera plus facile de créer une interface que votre endpoint retournera.
<?php
namespace AppFactory\Core\Api;
/**
* @api
*/
interface SettingsInterface
{
/**
* @return Data\SettingsInterface
*/
public function get();
}
Maintenant, lorsque vous retournez une instance d'un objet implémentant cette interface, Magento lira ses phpdocs et traitera leurs valeurs de retour. Maintenant, créez un fichier AppFactory\Core\Api\Data\SettingsInterface
comme suit
<?php
namespace AppFactory\Core\Api\Data;
interface SettingsInterface
{
/**
* @return int[]
**/
public function getSettings();
/**
* @return string[]
**/
public function getExtra();
}
Maintenant, lorsque vous créez une classe réelle qui implémentera ces 2 méthodes get et que vous la retournerez, AppFactory\Core\Api\SettingsInterface::get()
magento renverra quelque chose comme
{
"settings": [1, 2, 5],
"extra": ["my","array","of","strings"]
}
Si vous voulez un autre niveau, vous devez créer une autre interface qui gardera la settings
structure et l'ajoutera comme valeur de retour pour AppFactory\Core\Api\Data\SettingsInterface::getSettings()
.
Si vous avez besoin d'avoir quelque chose qui sera dynamique et que vous ne voulez pas ou ne pouvez pas préparer cette interface de structure, vous pouvez essayer de définir une chaîne codée json et de la placer @return string
pour l'un des champs. De cette façon, cependant, vous devrez vous assurer de décoder manuellement cette chaîne après avoir reçu la réponse, car votre réponse ressemblera à ceci:
{
"settings": [1, 2, 5],
"extra": "{\"test\":\"string\",\"value\":8}"
}
et pour l'utiliser, response.extra.test
vous devrez d'abord le faire response.extra = JSON.parse(response.extra);
manuellement