Если есть rule в urlManager, headers->set не работает?

Делаю контроллер для карты сайта (sitemap).
Идея такая: если обратиться к /sitemap - выдается sitemapindex.
Если обратиться к /sitemap/type.xml - выдается urlset
Для этого я прописал в конфиг:
'urlManager' => [
           ...
            'rules' => [
                   '/sitemap/<file>' => 'sitemap/index', 
                   ....
            ]

Таким образом, в контроллер sitemap я получаю $file в котором лежит нужный тип записей для вывода в urlset

В контроллере делаю:
public function actionIndex( $file = 0 )
    {
        // Заголовок Content-Type XML
        Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
        $headers = Yii::$app->response->headers;
        $headers->set('Content-Type', 'text/xml');
               if(!$file) {
                       // Здесь вывожу  sitemapindex;
                           return;
                       }
              // Здесь вывожу urlset для нужного $file
   }


Проблема:
Если обратиться к /sitemap - все ОК, заголовок Content-Type: text/xml есть
Если обратиться к /sitemap/type.xml - заголовок Content-Type не отправляется (т.е. не меняется, - шлет "text/html")
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Я думаю что
$headers = Yii::$app->response->headers;
        $headers->set('Content-Type', 'text/xml');

не срабатывает не там не там, дело не url manager
попробуйте так:
$headers = Yii::$app->response->headers;
$headers->add('Content-Type', 'text/xml');
Ответ написан
atillus
@atillus Автор вопроса
Интересно... на /sitemap/xxxxxx (URL обрабатывается через urlmanager и отправляет в контроллер sitemap) - работает просто:
header('Content-Type: application/xml');
а если напрямую обращаемся к контроллеру /sitemap
то работает только так:
$headers = Yii::$app->response->headers;
$headers->add('Content-Type', 'text/xml');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы