我假设这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();
}
现在,当您创建将实现这两个get方法的实际类时,您将在其中返回它,AppFactory\Core\Api\SettingsInterface::get()
那么magento将返回类似
{
"settings": [1, 2, 5],
"extra": ["my","array","of","strings"]
}
如果需要另一个级别,则需要创建另一个接口,该接口将保留settings
结构并将其添加为的返回值AppFactory\Core\Api\Data\SettingsInterface::getSettings()
。
如果您需要动态的东西,并且您不希望或无法准备此结构接口,则可以尝试@return string
为任何字段设置json编码的字符串和位置。但是,通过这种方式,您必须确保在收到响应后手动解码该字符串,因为这样您的响应将如下所示:
{
"settings": [1, 2, 5],
"extra": "{\"test\":\"string\",\"value\":8}"
}
为了使用,response.extra.test
您必须先response.extra = JSON.parse(response.extra);
手动进行