2016-06-29 14 views
0

조치로 일부 XML로 응답해야합니다. 나는 그게 잘 작동 Response::FORMAT_XML을 사용합니다. 브라우저에서응답 서식 자체를 수정하려면 어떻게해야합니까?

// In a controller: 

public static function actionFetchData() { 
    Yii::$app->response->format = Response::FORMAT_XML; 

    return [ 
     'a' => 'b', 
     ['c', 'd'], 
     'e' => ['f', 'g'] 
    ]; 
} 

결과 :

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <a>b</a> 
    <item> 
    <item>c</item> 
    <item>d</item> 
    </item> 
    <e> 
    <item>f</item> 
    <item>g</item> 
    </e> 
</response> 

그러나, 나는 응답데이터에서 루트 태그 이름을 변경하고 싶습니다. XML을 렌더링하는 데 사용되는 XmlResponseFormatter에는 rootTag 속성이 있으므로이 작업이 가능해야합니다. 어떻게해야합니까?

또는 일반적으로 : JSON 또는 무엇이든간에 포맷터 설정을 변경하려면 어떻게해야합니까?

답변

2

당신이 다음 사용하는 특정 작업에 특정 형식을 변경하려면 :.

Yii::$app->response->format = Response::FORMAT_XML; 
Yii::$app->response->formatters = [ 
     'xml' => [ 
      'class' => 'yii\web\XmlResponseFormatter', 
      'rootTag' => 'data', 
     ], 
    ]; 

    return [ 
     'a' => 'b', 
     ['c', 'd'], 
     'e' => ['f', 'g'] 
    ]; 
+0

작은 opimization :''xml '' 대신'Response :: FORMAT_XML'을 사용할 수 있습니다. – robsch

+0

바로 .... hehe .. –

-1

XML에 대한 자체 포맷터 객체를 만드는 것도 한 가지 방법입니다. 이유 : Yii::$app->response에서 formmatter가 동작 내에 존재하지 않습니다. 응답이 렌더링되면 나중에 만들어지며 너무 늦게 수정하면됩니다. 하지만 새로운 포맷터를 만들어서 XML 포맷터로 설정할 수 있습니다. 이것은 유효한 옵션입니다. 지금

public static function actionMetaInfo($docId) { 
    $formatter = new XmlResponseFormatter([ 
     'rootTag' => 'data', 
     'itemTag' => 'unnamed', 
    ]); 
    Yii::$app->response->formatters[Response::FORMAT_XML] = $formatter; 
    Yii::$app->response->format = Response::FORMAT_XML; 

    return [ 
     'a' => 'b', 
     ['c', 'd'], 
     'e' => ['f', 'g'] 
    ]; 
} 

출력 :

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <a>b</a> 
    <unnamed> 
     <unnamed>c</unnamed> 
     <unnamed>d</unnamed> 
    </unnamed> 
    <e> 
     <unnamed>f</unnamed> 
     <unnamed>g</unnamed> 
    </e> 
</data> 

은 여기뿐만 아니라 itemTag을 변경했습니다. 이렇게하면 다른 Formatter의 속성 (예 : JsonResponseFormatter)도 수정할 수 있습니다. 모든 응용 프로그램에 대한 XML 응답 포맷을 수정하려면

+0

왜 downvote? 뭔가 잘못? – robsch

0

, 당신은 당신의 설정 파일에 이것을 추가해야합니다 :

'components' => [ 
    'response' => [ 
     'formatters' => [ 
      'xml' => [ 
       'class' => 'yii\web\XmlResponseFormatter', 
       'rootTag' => 'data', 
      ], 
     ], 
    ], 
],