Как повторить'в среде Yii2 без ошибок "Объявление XML допускается только в начале документа" - PullRequest
0 голосов
/ 19 сентября 2019

Как сделать 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 допускается только в начале документа Ниже приведено отображение страницы до первой ошибки.

...