Форматы данных

Формат данных определяет способ составления и разбора HTTP-сообщения, например как следует конвертировать yii\httpclient\Message::$data в yii\httpclient\Message::$content и обратно.

По умолчанию поддерживаются следующие форматы:

Каждый формат представлен в виде двух объектов: 'форматтер' и 'парсер'. Форматтер определяет, как содержимое запроса должно быть составлено из данных. Парсер определяет, как содержимое сырого ответа должно преобразовываться в данные.

yii\httpclient\Client автоматически выбирает соответствующий форматтер и парсер для указанных выше форматов. Однако, вы можете изменить это поведение, используя yii\httpclient\Client::$formatters и yii\httpclient\Client::$parsers. При помощи этих свойств, вы можете добавлять свои собственные форматы и/или изменять стандартные. Например:

use yii\httpclient\Client;

$client = new Client([
    'formatters' => [
        'myformat' => 'app\components\http\MyFormatter', // добавить новый форматтер
        Client::FORMAT_XML => 'app\components\http\MyXMLFormatter', // переопределить форматтер XML, используемый по умолчанию
    ],
]);

При создании собственного парсера вам необходимо реализовать yii\httpclient\ParserInterface, при создании форматера - yii\httpclient\FormatterInterface. Например:

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;
    }
}