Как сделать echo '<?xml version="1.0" encoding="UTF-8"?>'
с учетом структуры Yii2 без ошибки «Объявление XML допускается только в начале документа» при использовании FORMAT_RAW в контроллере
В контроллере:
if (!$xml_sitemap = Yii::$app->cache->get('sitemap')) {
$urls = array();
$urls[] = array(
'loc' => \Yii::$app->urlManager->createUrl('/lien-he'),
'changefreq' => 'daily',
'priority' => 1.0
);
$xml_sitemap = $this->renderPartial('index', array(
'host' => Yii::$app->request->hostInfo,
'urls' => $urls,
));
Yii::$app->cache->set('sitemap', $xml_sitemap, 1);
}
Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
$headers = Yii::$app->response->headers;
$headers->add('Content-Type', 'text/xml');
return $xml_sitemap;
В представлении:
<?php
/* @var $urls */
/* @var $host */
echo '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
<?php foreach ($urls as $url): ?>
<url>
<loc><?= $host . $url['loc']; ?></loc>
<?php if (isset($url['lastmod'])): ?>
<lastmod><?= $url['lastmod']; ?></lastmod>
<?php endif; ?>
<changefreq><?= $url['changefreq']; ?></changefreq>
<priority><?= $url['priority']; ?></priority>
</url>
<?php endforeach; ?>
</urlset>
И при запуске я получаю ошибку:
Эта страница содержит следующие ошибки: ошибка в строке 2 в столбце 6:Декларация XML допускается только в начале документа Ниже приведено отображение страницы до первой ошибки.