簡體   English   中英

使用laravel渲染站點地圖時出錯

[英]error rendering a sitemap with laravel

我在使用laravel渲染站點地圖時遇到問題。 生成的xml似乎還可以,但是當我嘗試從chrome或firefox調用url時出現錯誤

 error on line 2 at column 6: XML declaration allowed only at the start of the document

實際上,文檔的第1行為空,並且xml聲明從第2行開始

這是我的代碼:

 return Response::view('sitemap.index', ['agences' => $agences])->header('Content-Type', 'application/xml');

我也嘗試過這種語法:

 $xml = View::make('sitemap.index', ['agences' => $agences]);
 return Response::make($xml, 200)->header('Content-Type', 'application/xml');

這樣我可以做

 dd($xml->render()); 

並意識到返回的字符串沒有空的第一行。 所以我猜是Response :: make是要怪的,但我真的不知道從哪里看

好吧,我要發表我自己的答案,原因很棘手,而且花了我一天的時間,好消息是我對laravel的了解略有增加。

所以我的xml站點地圖以空行開頭,這在瀏覽器上造成了錯誤。 Xml首先使用刀片模板生成。 由於不起作用,我決定使用RoumenDamianoff / laravel-sitemap

但是我有同樣的問題。 所以最后我決定再次使用SimpleXmlElement自己生成Xml,並且它什么都沒有改變。

從那時起,我開始挖掘Laravel內部的,以查看該空行可能來自請求生命周期。

基本上我的站點地圖非常簡單:

$urlset = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" /><!--?xml version="1.0" encoding="UTF-8"?-->');
datas = MyModel::All();
foreach($datas as $index=>$data){
// generate sitemap
}
$dom = new DomDocument();
$dom->loadXML($urlset->asXML());
$dom->formatOutput = true;
//output xml
$xml = $dom->saveXML();
$response = Response::make($xml, 200, ['Content-Type' => 'application/xml']);

為了測試,我決定更改我要的模型,然后生成的xml沒有第一個空行。 因此,我決定調查模型本身並找到錯誤。 在php開頭標記之前,模型文件只有一個空行。

刪除空行解決了我的問題....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM