如何在Laravel路由中返回.xml文件

Vic*_*ori 5 php sitemap laravel laravel-5

我已生成站点地图.xml文件并想要返回.我将文件放在我的views文件夹中并制作了这条路线:

Route::get('/site-map', function(){
    return view('sitemap.xml');
});
Run Code Online (Sandbox Code Playgroud)

虽然我不能让它显示出来.

Jon*_*hon 8

默认情况下,Laravel不支持将.xml文件作为视图加载.话虽如此,您的问题有几种解决方案:

  • 最简单的方法是将您sitemap.xml放在/public目录中.浏览器将能够看到该文件http://yourdomain.com/sitemap.xml.

  • 您可以加载文件的内容并返回响应,将Content-Type标头设置为application/xmltext/xml告诉浏览器您所服务的文件实际上是XML文档.

    return response(file_get_contents(resource_path('sitemap.xml')), 200, [
        'Content-Type' => 'application/xml'
    ]);
    
    Run Code Online (Sandbox Code Playgroud)
  • 或者,您可以.xml通过在服务提供商中执行类似的操作(例如register您的方法AppServiceProvider,位于app/Providers/AppServiceProvider.php)来告诉Laravel的取景器支持扩展:

    app('view.finder')->addExtension('xml');
    
    Run Code Online (Sandbox Code Playgroud)

    完成后,Laravel应该识别.xml为有效的视图扩展并加载XML文件,就好像它是一个视图一样.如果您想要:在视图中传递数据并使用Blade/PHP,还有另外一个好处:

    return view('sitemap');
    
    Run Code Online (Sandbox Code Playgroud)