Yii2在视图中呈现响应xml文件

时间:2015-11-19 10:48:47

标签: xml yii2

有谁知道如何在视图中显示.xml响应文件?将xml渲染为html?

A找到了类似的东西:

http://code.google.com/p/yii/source/browse/trunk/framework/web/widgets/CTextHighlighter.php

我不确定它是否可以帮助我,因为它适用于旧版本的Yii ......

3 个答案:

答案 0 :(得分:6)

参考Fabrizio的解决方案,这将允许您通过.css编辑样式:

在视图中加载并输出xml:

/views/site/xml.php

<?php echo file_get_contents(Yii::getAlias('@app/web/').'doc.xml');

如您所见,我将XML文档放入web文件夹,您可以根据自己的要求进行调整。

在控制器中,创建显示视图的操作:

public function actionXml() {
    Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
    Yii::$app->response->headers->add('Content-Type', 'text/xml');
    return $this->renderPartial('xml');
}

请注意,Fabrizio解决方案中提到的FORMAT_XML类的\yii\web\Response方法会将您的XML包装在<response>...</response>标记中,并将您的实际数据作为文本包含在<span>...</span>中{1}}。

相反,请确保您在XML标记中引用了样式表:

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/css" href="/css/doc.css"?>

再次根据您的需要随意调整.css的位置。

.css文件中,只需像使用HTML标记一样引用XML实体:

RootEntity {
    display: block;
}

希望这有帮助!

答案 1 :(得分:1)

在控制器动作中

\Yii::$app->response->format = \yii\web\Response::FORMAT_XML

请记住使用renderPartial()代替render()呈现视图,因此不会应用布局。

最后在视图中放入xml代码。

例如:

<强>控制器

public function actionTest()
{
    \Yii::$app->response->format = \yii\web\Response::FORMAT_XML;

    return $this->renderPartial('test');
}

查看

<Tests>
  <Test TestId="0001" TestType="CMD">
    <Name>Convert number to string</Name>
    <CommandLine>Examp1.EXE</CommandLine>
    <Input>1</Input>
    <Output>One</Output>
  </Test>
</Tests>

这就是全部!

答案 2 :(得分:0)

虽然在渲染之前修改动作内部的响应格式是可接受的方法,但您也可以使用框架功能 - yii\filters\ContentNegotiator过滤器:

use yii\filters\ContentNegotiator;
use yii\web\Response;

...

/**
 * @inheritdoc
 */
public function behaviors()
{
    return [
        [
            'class' => ContentNegotiator::className(),
            'only' => ['test'],
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
            ],
        ],
    ];
}

这样,设置响应格式和数据输出的逻辑就会分开(类似于yii\filters\VerbFilter),并且可以更好地管理多个操作。您还可以从数组构建XML并使用更多选项。