データ形式

データ形式が HTTP メッセージのコンテントを作成または解析する方法を決定します。 言い換えると、データ形式によって、yii\httpclient\Message::$datayii\httpclient\Message::$content が相互にどのように変換されるべきかが決定されます。

次の形式がデフォルトでサポートされています。

それぞれの形式は二つの実体、'formatter' と 'parser' によってカバーされます。 Formatter は、リクエストのコンテントがデータから作成される方法を決定します。Parser は、生のレスポンスコンテントがデータに解析される方法を決定します。

yii\httpclient\Client は、上述の形式すべてについて、自動的に対応する formatter と parser を選択します。 ただし、この振る舞いは、yii\httpclient\Client::$formattersyii\httpclient\Client::$parsers を使って変更することが出来ます。 これらのフィールドによって、あなた自身の形式を追加したり、標準的な形式を変更したりすることが出来ます。 例えば、

use yii\httpclient\Client;

$client = new Client([
    'formatters' => [
        'myformat' => 'app\components\http\MyFormatter', // 新しい formatter を追加
        Client::FORMAT_XML => 'app\components\http\MyXMLFormatter', // デフォルトの XML formatter をオーバーライド
    ],
    'parsers' => [
        // JsonParser のオプションを構成し、JSON をオブジェクトとしてパース
        Client::FORMAT_JSON => [
            'class' => 'yii\httpclient\JsonParser',
            'asArray' => false,
        ]
    ],
]);

あなた自身の parser を作成するときは yii\httpclient\ParserInterface を実装しなければなりません。 formatter の場合は yii\httpclient\ParserInterface です。例えば、

use yii\httpclient\FormatterInterface;
use yii\httpclient\ParserInterface;
use yii\httpclient\Response;

class ParserIni implements ParserInterface
{
    public function parse(Response $response)
    {
        return parse_ini_string($response->content);
    }
}

class FormatterIni implements FormatterInterface
{
    public function format(Request $request)
    {
        $request->getHeaders()->set('Content-Type', 'text/ini   ; charset=UTF-8');

        $pairs = []
        foreach ($request->data as $name => $value) {
            $pairs[] = "$name=$value";
        }

        $request->setContent(implode("\n", $pairs));
        return $request;
    }
}