Blade View не отображает xml

Я пытаюсь создать файл XML в Laravel. Я передаю данные в представление.

Однако XML не отображается.

Это то, что я делаю, на мой взгляд

<?php header('Content-Type: text/xml'); ?>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

@foreach ($merchants as $merchant)
<url>
<loc>{{ $merchant->merchant_url_text }}</loc>
</url>
@endforeach

</urlset>

Однако это просто печать переменной $merchant->merchant_url_text несколько раз без какой-либо структуры.

Любая помощь с тем, что я делаю неправильно.


person Gaurav Mehta    schedule 11.01.2017    source источник
comment
Вы уверены, что это не только ваш браузер так делает? Что вы видите, когда просматриваете исходный код страницы в браузере?   -  person John Bupit    schedule 11.01.2017
comment
@JohnBupit Когда я вижу исходный код страницы, он показывает теги. В том же браузере, если я открою эту ссылку promospro.com/sitemaps01_featured_page.xml, я увижу правильно отображаемый XML. Любая причина, по которой мой контент не отображается должным образом. Кроме того, если теги правильно отображаются в исходном коде страницы, означает ли это, что он считается фактическим XML-файлом?   -  person Gaurav Mehta    schedule 11.01.2017
comment
Если вы получаете ошибку «версия», переместите строку «‹?xml version=1.0 encoding=UTF-8?›» в переменную и покажите ее с помощью {!! $headerString !!}   -  person Tum    schedule 31.08.2020


Ответы (2)


Вы неправильно отправляете заголовки, поэтому ваш ответ интерпретируется как text/html. В Laravel вы можете использовать метод заголовка, чтобы добавить серию заголовков к ответу, прежде чем отправить его обратно пользователю. вот как:

return response($content)
        ->withHeaders([
            'Content-Type' => 'text/xml'
        ]);
person John Bupit    schedule 11.01.2017
comment
Спасибо! Это сработало. Я передал данные из моего контроллера, используя return response()-›view('sitemap', compact('merchants'))-›header('Content-Type', 'text/xml'); - person Gaurav Mehta; 11.01.2017
comment
@GauravMehta У меня такая же проблема, не могли бы вы прислать код вашего контроллера и блейд-файла? Я пытаюсь таким образом, а затем показываю пустую страницу, я не знаю, почему это происходит - person Kishan Patel; 10.05.2019

Обычно Blade — это механизм шаблонов, используемый для рендеринга HTML и других вещей, связанных с внешним интерфейсом. Я не думаю, что вам нужно отображать xml в файле блейда. Вместо этого вы можете напрямую вернуть ответ xml от вашего контроллера.

Пожалуйста, попробуйте этот пакет.

https://packagist.org/packages/jailtonsc/laravel-response-xml

Редактировать:

Если вы пытаетесь создать карту сайта или что-то подобное с помощью Blade, попробуйте следующий код.

<?php header('Content-Type: text/xml'); ?>
  {{ '<?xml version="1.0"?>' }}
  {{ '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' }}

@foreach ($merchants as $merchant)
    {{ '<url>' }}
    {{ "<loc> $merchant->merchant_url_text </loc>" }}
    {{ '</url>' }}
@endforeach

{{ '</urlset>' }}
person Arun Code    schedule 11.01.2017
comment
Я считаю, что ОП пытается создать карту сайта XML, для которой этот пакет не предназначен. - person John Bupit; 11.01.2017
comment
Спасибо @JohnBupit. Я собирался сказать то же самое. Пакет может быть бесполезен для создания карты сайта. - person Gaurav Mehta; 11.01.2017
comment
@GauravMehta обновлен примером кода для вашего сценария. - person Arun Code; 11.01.2017
comment
вместо этого вы можете использовать {!! !!}. - person manix; 11.01.2017