[英]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.