私はそれAppFactory\Core\Api\SettingInterface::get()
がRESTエンドポイントであると想定しています。その場合、phpdocコメントでは、これが返すものを定義する必要があります。Magento RESTハンドラーはその値を取得して処理し、不要なすべてのデータを削除します。残ったものはJSONにエンコードされるため、JavaScriptでは、jsonエンコードされた文字列ではなく、すでに適切なJSハッシュとして取得できます。
これらのエンドポイントに関するトリックは、何を返すかを非常に正確に定義する必要があることです。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);
手動で行う必要があります