Class yii\httpclient\XmlFormatter

Inheritanceyii\httpclient\XmlFormatter » yii\base\BaseObject
Implementsyii\httpclient\FormatterInterface
Available since extension's version2.0
Source Code https://github.com/yiisoft/yii2-httpclient/blob/master/src/XmlFormatter.php

XmlFormatter formats HTTP message as XML.

Public Properties

Hide inherited properties

Property Type Description Defined By
$contentType string The Content-Type header for the response yii\httpclient\XmlFormatter
$encoding string The XML encoding. yii\httpclient\XmlFormatter
$itemTag string The name of the elements that represent the array elements with numeric keys. yii\httpclient\XmlFormatter
$rootTag string The name of the root element. yii\httpclient\XmlFormatter
$useTraversableAsArray boolean Whether to interpret objects implementing the Traversable interface as arrays. yii\httpclient\XmlFormatter
$version string The XML version yii\httpclient\XmlFormatter

Public Methods

Hide inherited methods

Method Description Defined By
format() Formats given HTTP request message. yii\httpclient\XmlFormatter

Protected Methods

Hide inherited methods

Method Description Defined By
buildXml() yii\httpclient\XmlFormatter

Property Details

Hide inherited properties

$contentType public property

The Content-Type header for the response

public string $contentType 'application/xml'
$encoding public property

The XML encoding. If not set, it will use the value of \yii\base\Application::charset.

public string $encoding null
$itemTag public property (available since version 2.0.1)

The name of the elements that represent the array elements with numeric keys.

public string $itemTag 'item'
$rootTag public property

The name of the root element.

public string $rootTag 'request'
$useTraversableAsArray public property (available since version 2.0.1)

Whether to interpret objects implementing the Traversable interface as arrays. Defaults to true.

$version public property

The XML version

public string $version '1.0'

Method Details

Hide inherited methods

buildXml() protected method

protected void buildXml ( $element, $data )
$element DOMElement
$data mixed

                protected function buildXml($element, $data)
{
    if (is_array($data) ||
        ($data instanceof \Traversable && $this->useTraversableAsArray && !$data instanceof Arrayable)
    ) {
        foreach ($data as $name => $value) {
            if (is_int($name) && is_object($value)) {
                $this->buildXml($element, $value);
            } elseif (is_array($value) || is_object($value)) {
                $child = new DOMElement(is_int($name) ? $this->itemTag : $name);
                $element->appendChild($child);
                $this->buildXml($child, $value);
            } else {
                $child = new DOMElement(is_int($name) ? $this->itemTag : $name);
                $element->appendChild($child);
                $child->appendChild(new DOMText((string) $value));
            }
        }
    } elseif (is_object($data)) {
        $child = new DOMElement(StringHelper::basename(get_class($data)));
        $element->appendChild($child);
        if ($data instanceof Arrayable) {
            $this->buildXml($child, $data->toArray());
        } else {
            $array = [];
            foreach ($data as $name => $value) {
                $array[$name] = $value;
            }
            $this->buildXml($child, $array);
        }
    } else {
        $element->appendChild(new DOMText((string) $data));
    }
}

            
format() public method

Formats given HTTP request message.

public yii\httpclient\Request format ( yii\httpclient\Request $request )
$request yii\httpclient\Request

HTTP request instance.

return yii\httpclient\Request

Formatted request.

                public function format(Request $request)
{
    $contentType = $this->contentType;
    $charset = $this->encoding === null ? Yii::$app->charset : $this->encoding;
    if (stripos($contentType, 'charset') === false) {
        $contentType .= '; charset=' . $charset;
    }
    $request->getHeaders()->set('Content-Type', $contentType);
    $data = $request->getData();
    if ($data !== null) {
        if ($data instanceof DOMDocument) {
            $content = $data->saveXML();
        } elseif ($data instanceof SimpleXMLElement) {
            $content = $data->saveXML();
        } else {
            $dom = new DOMDocument($this->version, $charset);
            $root = new DOMElement($this->rootTag);
            $dom->appendChild($root);
            $this->buildXml($root, $data);
            $content = $dom->saveXML();
        }
        $request->setContent($content);
    }
    return $request;
}