2017-01-11 4 views
1

Я пытаюсь создать XML-файл в Laravel. Я передаю данные для просмотра.Blade View not rendering xml

Однако 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_url_text несколько раз без какой-либо структуры.

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

+0

Уверен, что это не только ваш браузер, который выглядит так, как есть? Что вы видите при просмотре источника страницы в браузере? –

+0

@JohnBupit Когда я вижу источник страницы, он показывает теги. В том же браузере, если я открою эту ссылку http://www.promospro.com/sitemaps01_featured_page.xml, я могу правильно отобразить XML. Любая причина, по которой мой контент не отображается должным образом. Кроме того, если теги правильно отображаются в источнике страницы, означает ли это, что он считается фактическим xml-файлом? –

ответ

1

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

return response($content) 
     ->withHeaders([ 
      'Content-Type' => 'text/xml' 
     ]); 
+0

Спасибо! Это сработало. Я передал данные с моего контроллера, используя return response() -> view ('sitemap', compact ('merchants')) -> header ('Content-Type', 'text/xml'); –

0

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

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

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

Edit:

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

<?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>' }} 
+0

Я считаю, что ОП пытается создать XML-карту сайта, для которой этот пакет не предназначен. –

+0

Спасибо @JohnBupit. Я собирался сказать то же самое. Пакет не может быть полезен для создания файла Sitemap. –

+0

@GauravMehta обновлен с примером кода для вашего сценария. –