2016-02-14 2 views
2

У меня возникли проблемы с установкой mime-типа в sitemapxml.xml. Я нашел this, но это не имеет никакого эффекта:Как эхо sitemap.xml Cakephp3.1

$this->RequestHandler->respondAs('xml'); 
$this->response->header(['Content-type' => 'application/xml']); 

Я также попытался добавить header('Content-type:text/xml') в начале моего зрения sitemap.ctp.

+0

Всегда добавить надлежащий контекст, в данном случае, говоря, где именно ваш фрагмент кода находится в контроллере ! – ndm

ответ

0

Проверьте руководство миграции:

RequestHandlerComponent Теперь переключает раскладку и шаблон на основе проанализированного расширения или Accept заголовка в beforeRender() обратного вызова вместо startup().

Cookbook > Appendices > 3.1 Migration Guide > RequestHandlerComponent

Таким образом, это означает, что вы установили там (там, где это, но уверен, что это не в Controller::beforeRender() обратного вызова), будут перезаписаны после того, как действие контроллера побежал, и до представления .

Есть различные способы справиться с этим.

  1. Сделать правильное использование компонента обработчика запросов, то есть, включить расширение синтаксического и поставить расширение в вашей URL, или отправить правильный Accept заголовок. Таким образом, компонент установит правильный тип ответа.

    Это рекомендуемый способ!

    Смотрите также Cookbook > Views > JSON and XML views

  2. Установите RequestHandlerComponent::$ext свойство, которое оцениваемого до рендеринга, и будет вызывать компонент обработчика запроса установить ответ типа соответственно,

    $this->RequestHandler->ext = 'xml'; 
    
  3. Использование RequestHandlerComponent::renderAs() для указания компонента обработчика запроса использовать настроенное представление XML, которое переопределит «неправильный» тип, установленный в обратном вызове beforeRender().

    $this->RequestHandler->renderAs($this, 'xml'); 
    
  4. Не используйте компонент обработчика запроса и установить ответ типа непосредственно на объект ответа.

    $this->response->type('xml'); 
    
0

межжала, я увидел, что $this->response->type работает только если $this->render('view'); устанавливается непосредственно

Смежные вопросы