Yii2 輸出xml格式數(shù)據(jù)的方法

字號:


    php中對xml的處理,雖然說實(shí)際開發(fā)中目前用的少了,但是難免會用到,用到的時(shí)候呢,總結(jié)起來還是稍稍有那么一丁點(diǎn)的麻煩。
    我們來看看yii2中是怎么對xml進(jìn)行處理的。會超乎你想象的簡單哦。
    我們以輸出xml格式的數(shù)據(jù)為例。
    既然是輸出,必然就涉及到web請求與響應(yīng)了,不熟悉的可以先去了解下HTTP協(xié)議。
    yii2中支持以下幾種返回格式,均可自定義配置。
    HTML: implemented by yii\web\HtmlResponseFormatter.
    XML: implemented by yii\web\XmlResponseFormatter.
    JSON: implemented by yii\web\JsonResponseFormatter.
    JSONP: implemented by yii\web\JsonResponseFormatter.
    RAW: use this format if you want to send the response directly without applying any formatting.
    我們就是沖著XML來的。
    先來看一種簡單的輸出xml格式數(shù)據(jù)
    public function actionTest () {
    \Yii::$app->response->format = \yii\web\Response::FORMAT_XML;
    return [
    'message' => 'hello world',
    'code' => 100,
    ];
    }
    這里我們指定了reponse響應(yīng)格式 FORMAT_XML,然后訪問這個(gè)test方法就可以看到頁面上輸出了xml類型的數(shù)據(jù)
    <response>
    <message>hello world</message>
    <code>100</code>
    </response>
    上面提到的方式未免有點(diǎn)麻煩,麻煩在配置多項(xiàng)的時(shí)候就不是那么方便了,我們來自己創(chuàng)建reponse對象試一試
    public function actionTest () {
    return \Yii::createObject([
    'class' => 'yii\web\Response',
    'format' => \yii\web\Response::FORMAT_XML,
    'formatters' => [
    \yii\web\Response::FORMAT_XML => [
    'class' => 'yii\web\XmlResponseFormatter',
    'rootTag' => 'urlset', //根節(jié)點(diǎn)
    'itemTag' => 'url', //單元
    ],
    ],
    'data' => [ //要輸出的數(shù)據(jù)
    [
    'loc' => 'http://********',
    ],
    ],
    ]);
    }
    為了方便接下來的說明,上面一并做了配置,可以看到我們配置了響應(yīng)的格式format,單獨(dú)做了些配置,包括配置根節(jié)點(diǎn)rootTag,單元itemTag以及數(shù)據(jù)類型。有同學(xué)注意到了,這里其實(shí)我們很簡單的就實(shí)現(xiàn)了一個(gè)站點(diǎn)地圖的xml格式輸出。是的,就是這么簡單。