Я предполагаю, что AppFactory\Core\Api\SettingInterface::get()
это конечная точка REST. В этом случае в комментариях phpdoc вы должны определить, что это будет возвращать. Обработчик Magento REST примет это значение и обработает его, чтобы удалить все ненужные данные. То, что осталось, будет закодировано в JSON, поэтому в javascript вы можете получить его как уже правильный JS-хэш, а не как json-кодированную строку.
Хитрость этих конечных точек заключается в том, что вам нужно очень точно определить, что вы вернете. Magento не сможет обрабатывать что-то такое общее, как «массив», где вы будете устанавливать все, что вам нравится.
В вашем случае, чтобы не пытаться играть с массивом строк, будет проще создать интерфейс, который будет возвращать ваша конечная точка.
<?php
namespace AppFactory\Core\Api;
/**
* @api
*/
interface SettingsInterface
{
/**
* @return Data\SettingsInterface
*/
public function get();
}
Теперь, когда вы возвращаете экземпляр объекта, реализующего этот интерфейс, Magento будет читать его phpdocs и обрабатывать их возвращаемые значения. Теперь создайте файл AppFactory\Core\Api\Data\SettingsInterface
следующим образом
<?php
namespace AppFactory\Core\Api\Data;
interface SettingsInterface
{
/**
* @return int[]
**/
public function getSettings();
/**
* @return string[]
**/
public function getExtra();
}
Теперь, когда вы создадите реальный класс, который будет реализовывать эти 2 метода get, и вы вернете его, AppFactory\Core\Api\SettingsInterface::get()
magento вернет что-то вроде
{
"settings": [1, 2, 5],
"extra": ["my","array","of","strings"]
}
Если вы хотите другой уровень, вам нужно создать другой интерфейс, который сохранит settings
структуру и добавит его в качестве возвращаемого значения для AppFactory\Core\Api\Data\SettingsInterface::getSettings()
.
Если вам нужно что-то, что будет динамичным, и вы не хотите или не можете подготовить этот интерфейс структуры, тогда вы можете попробовать установить json-закодированную строку и место @return string
для любого из полей. Таким образом, однако, вы должны будете убедиться, что вручную расшифровали эту строку после получения ответа, так как тогда ваш ответ будет выглядеть так:
{
"settings": [1, 2, 5],
"extra": "{\"test\":\"string\",\"value\":8}"
}
и для того, чтобы использовать, response.extra.test
вам придется сначала сделать response.extra = JSON.parse(response.extra);
вручную