XmlResponseFormatter
XmlResponseFormatter
Здравствуйте.
Не подскажите, каким образом можно задать content Type и root Tag ?
Не подскажите, каким образом можно задать content Type и root Tag ?
Re: XmlResponseFormatter
Я умею пользоваться документацией, просто не могу понять как их вызвать.
Re: XmlResponseFormatter
так задаем свой класс:wxectrbhj писал(а):Я умею пользоваться документацией, просто не могу понять как их вызвать.
Код: Выделить всё
'response' => [
'formatters' => [
Response::FORMAT_JSON => 'common\components\JsonResponseFormatter'
]
]
Код: Выделить всё
'response' => [
'formatters' => [
Response::FORMAT_JSON => [
'class' => 'common\components\JsonResponseFormatter',
// тут настройки
]
]
]
Re: XmlResponseFormatter
Столкнулся с такой же проблемой , но ни документация , ни предыдущий совет , к сожалению , не внес ясности
Вот пример :
Все работает , но rootTag мне нужно сменить ( по умолчанию он = 'reponse' )
В документации есть :
Class yii\web\XmlResponseFormatter
и
$rootTag
Но как в моем примере задать это свойств - ну без малейшего понятия и в нете нигде такой пример не рассматривается (((
Есть еще вариант на основе официальной документации. Реализуется с помощью поведения :
https://github.com/samdark/yii2-cookboo ... formats.md
И вроде бы красивый вариант , но опять же непонятно как/куда сюда воткнуть этот $rootTag
Спасибо !
Вот пример :
Код: Выделить всё
$export_rates=ExchangeDirection::getRatesArray();
if ($export_type == 'xml') {
\Yii::$app->response->format = \yii\web\Response::FORMAT_XML;
}elseif($export_type == 'json'){
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
}
return export_rates;
Все работает , но rootTag мне нужно сменить ( по умолчанию он = 'reponse' )
В документации есть :
Class yii\web\XmlResponseFormatter
и
$rootTag
Но как в моем примере задать это свойств - ну без малейшего понятия и в нете нигде такой пример не рассматривается (((
Есть еще вариант на основе официальной документации. Реализуется с помощью поведения :
https://github.com/samdark/yii2-cookboo ... formats.md
И вроде бы красивый вариант , но опять же непонятно как/куда сюда воткнуть этот $rootTag
Код: Выделить всё
public function behaviors()
{
return [
// ...
'contentNegotiator' => [
'class' => \yii\filters\ContentNegotiator::className(),
'only' => ['index', 'view'],
'formatParam' => '_format',
'formats' => [
'application/json' => \yii\web\Response::FORMAT_JSON,
'application/xml' => \yii\web\Response::FORMAT_XML,
],
],
];
}
Спасибо !
Re: XmlResponseFormatter
комментом выше есть слова "тут настройки" - эти слова написаны для понимания того, где писать настройки форматтера.
Re: XmlResponseFormatter
"тут настройки" - это я прочитал , с русским проблем нет
Но вот это "тут" никак не вяжется с тем что у меня в первом вариант
Даже примеров не могу написать что бы передать насколько не вяжется
Попробую
Вариант для первого случая:
Вариант второго случая:
Если вы давали пример используя ваш код в конфигурационном файле , то вопросов становится ещё больше ибо непонятно , все страницы будут выводиться XML ? и тп
Но вот это "тут" никак не вяжется с тем что у меня в первом вариант
Даже примеров не могу написать что бы передать насколько не вяжется
Попробую
Вариант для первого случая:
Код: Выделить всё
$export_rates=ExchangeDirection::getRatesArray();
if ($export_type == 'xml') {
\Yii::$app->response->format = \yii\web\Response::FORMAT_XML;
// Как примедрить сюда "ТУ" настройку ?
\Yii::$app->response->rootTag='test'; \\ Не работает
}elseif($export_type == 'json'){
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
}
return export_rates;
Вариант второго случая:
Код: Выделить всё
public function behaviors()
{
return [
// ...
'contentNegotiator' => [
'class' => \yii\filters\ContentNegotiator::className(),
'only' => ['index', 'view'],
'formatParam' => '_format',
'formats' => [
'application/json' => \yii\web\Response::FORMAT_JSON,
'application/xml' => \yii\web\Response::FORMAT_XML,
// Куда/как тут "ТУ" настройку пихнуть ?
'rootTag' => 'test' // Не работает
],
],
];
}
Последний раз редактировалось zxczxc12 2016.05.24, 17:15, всего редактировалось 1 раз.
Re: XmlResponseFormatter
1) а вы попробовали? все в xml выводится?
Re: XmlResponseFormatter
zelenin писал(а):1) а вы попробовали? все в xml выводится?
Вроде начинает доходить до меня
Но тогда другой вопрос
Код: Выделить всё
'response' => [
'formatters' => [
Response::FORMAT_JSON => 'common\components\JsonResponseFormatter'
]
]
Какое оно должно быть ?
Спасибо
Re: XmlResponseFormatter
так мы задаем класс своего форматтера для json (в приведенном вами примере). Если не задавать, то будет использоваться дефолтный. Вам осталось задать настройки для дефолтного форматтера xml.
Re: XmlResponseFormatter
zelenin писал(а):так мы задаем класс своего форматтера для json (в приведенном вами примере). Если не задавать, то будет использоваться дефолтный. Вам осталось задать настройки для дефолтного форматтера xml.
Спасибо огромное за желание помочь но
никак не решает вопроса ((Вам осталось задать настройки для дефолтного форматтера xml.
Re: XmlResponseFormatter
Отвечу сам на этот вопрос популярно и на пальцах
Вот решение без вмешательство в конфигурационные файлы:
Файл XmlCustomRootTagFormatter.php
Алилуя !
Вот решение без вмешательство в конфигурационные файлы:
Код: Выделить всё
if ($export_type == 'xml') {
Yii::$app->response->format = \yii\web\Response::FORMAT_XML;
Yii::$app->response->formatters = ['xml' => \common\components\XmlCustomRootTagFormatter::className() ];
}
return $export_rates;
Код: Выделить всё
class XmlCustomRootTagFormatter extends \yii\web\XmlResponseFormatter
{
public function __construct()
{
$this->rootTag='rates';
parent::__construct();
}
}
Алилуя !
Re: XmlResponseFormatter
тоже самое можно было прописать в конфиге.zxczxc12 писал(а):Отвечу сам на этот вопрос популярно и на пальцах
Вот решение без вмешательство в конфигурационные файлы:
Файл XmlCustomRootTagFormatter.phpКод: Выделить всё
if ($export_type == 'xml') { Yii::$app->response->format = \yii\web\Response::FORMAT_XML; Yii::$app->response->formatters = ['xml' => \common\components\XmlCustomRootTagFormatter::className() ]; } return $export_rates;
Код: Выделить всё
class XmlCustomRootTagFormatter extends \yii\web\XmlResponseFormatter { public function __construct() { $this->rootTag='rates'; parent::__construct(); } }
Алилуя !